Alloc流程

对象 = [[XXX alloc] init];

alloc作用:为对象申请内存空间,内存空间的大小受属性影响;

init作用:将XXX class与内存空间大小进行关联;

ps:new函数基本上等同于[[XXX alloc] init],区别在于alloc会用到zone进行空间申请,会把对象分配到相邻的地址,提升性能。new里无法对对象进行initXXX等构造操作;


通过对libobjc.A.dylib源码进行分析,可以将alloc流程梳理为:

alloc ->_objc_rootAlloc ->callAlloc ->_objc_rootAllocWithZone -> _class_createInstanceFromZone 


其中核心流程是在_class_createInstanceFromZone函数里:

1、instanceSize:计算对象需要多少字节,并以16字节对齐;

2、calloc:通过第1步的大小进行内存空间大小的申请;

3、initInstanceIsa:将对象与内存地址进行关联;

你可能感兴趣的:(Alloc流程)