OC对象的alloc过程

在iOS开发中,我们使用OC对象来进行编程,本篇文章我们一起来探讨OC对象是如何初始化的。
在这里,我们使用的版本信息如下:

Mac OS: 10.15.6
Xcode: 11.3.1
OC开源库:objc4-781.tar.gz

接下来,我们会根据源码进行调试。

分析

我们对NSObject进行初识化,并且在初始化的位置处设置一个断点
OC1.png
  • 1,在 alloc 方法处设置一个断点
  • 2,当断点触发时,点击 step into,跟进该方法。

当我们跟进 alloc方法后

OC2.png

会继续 调用callAlloc函数,allocWithZone参数需要注意下,这里传的是 false
然后在点击 step into
image.png

我们在每一个 return 处设置一个断点,并点击 continue,会直接调用 _objc_rootAllocWithZone,我们进入到该函数

OC4.png

我们可以看出,该函数直接返回 _class_createInstanceFromZone函数的返回值,
OC5.png

  • 1,instanceSize用来计算该对象所需的内存空间大小,当 size < 16时,分配16字节空间。当 对象所需内存大于16时,则分配 (x + size_t(15)) & ~size_t(15)(16的整数倍)的空间。

  • 2,计算出对象所需的空间后,调用 calloc函数申请 size大小的空间,并返回空间的地址值。

  • 3,initInstanceIsa 关联到相应的类。

这样的话,就完成了一个对象的初始化。

总结:

NSObject对象初始化的过程基本流程如下:


OC6.png

你可能感兴趣的:(OC对象的alloc过程)