美文网首页iOS 原理篇
alloc的流程分析(初探)

alloc的流程分析(初探)

作者: 似水流年_9ebe | 来源:发表于2021-06-07 07:15 被阅读0次

alloc的基本流程分析


一 准备工作:


新建一个Demo工程,创建一个LGPerson类,继承NSObject,如图:

1

打断点运行后,按control,点击单步调试,进入如下图:

从上图可以看出,此时调用objc_alloc函数,我们加一个objc_alloc的符号断点,进入如下图

2

从上图可以看出,objc_alloc方法是在libobjc.dylib动态库中,也就是在objc的源码中,objc的源码苹果开源出来了,我们下载下来,通过一系列的配置,可以调试(源码的调试,后续文章推出,这里用已配好的objc818举例)

二 源码的分析:

我们把上述的Demo中的LGPerson放到源码工程中,并在main函数创建这个类对象。

在源码中,我们可以单步的调试,发现_objc_rootAlloc,callAlloc,_objc_rootAllocWithZone这几个关键函数,我们通过源码分析,得出alloc的基本流程:

1 alloc

2 _objc_rootAlloc

3 callAlloc

4 _objc_rootAllocWithZone

5 _class_createInstanceFromZone

    5.1  instanceSize(计算大小)

    5.2 calloc(分配内存)

    5.3 检查内存分配是否成功

         5.3.1 失败 _objc_callBadAllocHandler

         5.3.2 成功 initInstanceIsa(初始化isa)

6 return 

结语:

1.cls->instanceSize:先计算出需要的内存空间大小,对象内存大小由成员变量决定。

2.calloc:向系统申请开辟内存,返回地址指针

3.obj->initInstanceIsa:关联到相应的类

4.计算字节对齐

(x + WORD_MASK) & ~WORD_MASK; WORD_MASK为7UL

相关文章

网友评论

    本文标题:alloc的流程分析(初探)

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