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

二、

三、

四、

五、

六、

七、

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

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

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

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

总结:其实alloc这个类方法当在调用的时候,内部已经创建了相应的实例对象,所以这个对象已经存在了。
既然alloc已经创建了对象,那么init方法干嘛了呢?
init方法底层原理
通过断点调试,同样发现这里是通过发送消息init执行的。
然后查看源码发现,init方法最后什么都没有做,只是将alloc创建的对象直接返回了而已!

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