一探索方式?
1.下一个符号断点Symbolic Breakpoint
2.打开反汇编显示
3.直接下代码断点
具体操作方式为 Control+ in ,in是指下图的向下的箭头按钮
二探索libObjc源码
我们下载了 libObjc 的源码到我们的电脑上后是不能直接运行的,我们需要进行一定的配置才能实现源码追踪流程
配置好 libObjc之后,新建一个项目,然后运行如下代码:
1.alloc分析
Person *objc = [Person alloc];
然后我们直接下符号断点objc_alloc,这样就会先来到的是objc_alloc
之后会开始开辟内存和且绑定到相应的类
核心方法:
1.cls->instanceSize(extraBytes); //需要计算出需要的内存空间小大
2.calloc /向/系统申请开辟内存,返回指针地址
3.obj->initInstanceIsa(cls, hasCxxDtor); //关联到相应的类
alloc执行流程图
三init分析
init相比alloc来说,init内部实现比较简单,先来到的是 _objc_rootInit 然后就直接返回 obj了。其实这里是一种抽象工厂设计模式的体现,对于 NSObject自带的 init方法来说,其实什么也没干,但是如果你继承于 NSObject的话,然后就可以去重写 initWithXXX 之类的初始化方法来做一些初始化操作。