iOS alloc 底层分析
2021-08-21 本文已影响0人
程序员进阶
1、
苹果开源代码地址:https://opensource.apple.com
这个地址用的更直接 https://opensource.apple.com/tarballs/
2、
alloc流程图

3、
底层分析的三种思维方式:
1: 下断点 :control+in objc_alloc
2: 汇编 跟流程 - 符号断点: objc_alloc
3: 下符号断点(objc_alloc) 确定未知 : libobjc.A.dylib`+[NSObject alloc]:
4、alloc申请内存:
字节对齐
对象属性在内存中的布局
5、
iOS isa深入理解之isa指向流程
https://www.jianshu.com/p/0f9eeb72fe60
通过[NSObject alloc]创建的实例对象,其实就是objc_object的实例,而其中的isa指向的是由objc_class创建的类对象。并且还有几点细节,分别是
1、objc_class是objc_object的子类;
2、objc_class除了由objc_object继承带来的isa,还是自己的superClass指针; (其实还有其他一些成员变量如cache和bits,不过我们这里先不做讨论)
根据
结论1:实例对象的isa指向的内容是对应的类对象信息
结论2:类对象的superclass指向父类对应的类对象
结论3:所有元类的isa都指向NSObject 对应的元类我们称其为根元类
结论4:根元类的superclass指针指向NSObject的类对象,其他子元类的superclass指针指向对应父类的元类。
可得出如下经典的图,也是iOS十分重要的一个图。

