美文网首页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