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:将对象与内存地址进行关联;

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容