OC对象的底层原理

配置objc源码

要学习,先要看底层源码是怎么回事儿,那就下载源码,调试查看。
从苹果官方opensource中可以下载到objc开源代码。经过配置,我们能够将这个源码执行到工程中去。
具体配置方法如下:
一、


OC对象的底层原理_第1张图片
image.png

二、


OC对象的底层原理_第2张图片
image.png

三、
OC对象的底层原理_第3张图片
image.png

四、
OC对象的底层原理_第4张图片
image.png

五、
OC对象的底层原理_第5张图片
image.png

六、


OC对象的底层原理_第6张图片
image.png

七、
OC对象的底层原理_第7张图片
image.png

alloc底层原理

其实objc内部执行init方法时是发送一个alloc消息,这个消息的接受者是class
LGPerson:


OC对象的底层原理_第8张图片
image.png

然后,我们可以通过跟踪源码,找到alloc最后是会执行了NSObject alloc方法,通过查看x1寄存器知道,这个方法就是alloc方法。


OC对象的底层原理_第9张图片
image.png

通过代码流程发现,最后创建了这个对象,而这个对象就是最后返回的对象了。


image.png

alloc方法整个创建对象流程图:


OC对象的底层原理_第10张图片
image.png

总结:其实alloc这个类方法当在调用的时候,内部已经创建了相应的实例对象,所以这个对象已经存在了。

既然alloc已经创建了对象,那么init方法干嘛了呢?

init方法底层原理

通过断点调试,同样发现这里是通过发送消息init执行的。
然后查看源码发现,init方法最后什么都没有做,只是将alloc创建的对象直接返回了而已!


所以这就是init方法最后干的事情,其实就是什么也没有干。
那么为什么苹果会这样设计呢,我们从NSObject的init方法中没有找到什么处理,那是因为他是NSObject。
还记得我们经常初始化一些类的时候,会重写init方法吗?
其实苹果留出来这个方法就是方便开发者,因为这个实例对象已经在alloc时存了,所以,当执行init的时候,可以给这个对象复制,属性初始化等等这个操作了,方便程序员在对象返回之前做一些想要做得事情。

你可能感兴趣的:(OC对象的底层原理)