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

你可能感兴趣的:(iOS底层原理探索—NSObject的alloc 源码分析)