美文网首页iOS
OC对象的底层原理

OC对象的底层原理

作者: 我是晶锅 | 来源:发表于2019-03-05 20:17 被阅读17次

配置objc源码

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


image.png

二、


image.png
三、
image.png
四、
image.png
五、
image.png

六、


image.png
七、
image.png

alloc底层原理

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


image.png

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


image.png

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


image.png

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


image.png

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

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

init方法底层原理

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


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

相关文章

网友评论

    本文标题:OC对象的底层原理

    本文链接:https://www.haomeiwen.com/subject/qnqvuqtx.html