iOS底层原理探索—NSObject的alloc 源码分析

这篇文章与上一片文章区别在于,NSObject中的alloc自定义类中的alloc源码流程的区别。

NSObject的alloc无法进入源码

  • NSObjectAnimal处添加断点

    image.png

  • 在alloc源码处打一断点


    image.png
  • 放开第一处断点,发现并没有进入alloc源码


    image.png

探索NSObject中的alloc为什么不走alloc

image.png

通过汇编代码得知[NSObject alloc]走的是objc_alloc方法

image.png

探索[NSObject alloc][Animal alloc]的区别

  • NSObject为基类,所有的自定义对象都要继承自NSObject
  • Animal继承了NSObject ,重写了NSObjectalloc

1.经过断点调试发现Animal中的alloc调用了两次,即调用alloc源码后,还会走到objc_alloc,调用callAlloc两次

image.png

  • 发现第一次objc_alloc --> callAlloc走到callAlloc方法后调用的是endif下面的objc_msgSend方法,表示向objc_msgSend系统发送消息
  • 继续执行代码后,发现执行的是alloc --> callAlloc --> _objc_rootAllocWithZone,这是我们上一篇文章介绍的内容

2.至于NSObject中alloc 走到 objc_alloc的 原因这是系统所自动调用的。

结论:
1.[NSObject alloc]执行流程

image.png

2.自定义类的alloc执行流程
image.png

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容