美文网首页
runtime底层之alloc的底层探究

runtime底层之alloc的底层探究

作者: AndyLLLL | 来源:发表于2019-02-19 17:50 被阅读0次

    我们在日常开发中都知道alloc的功能是给对象来分配内存的,但是具体底层怎么实现很少有人去探究,接下来我们通过源码加汇编的结合来分析alloc的底层实现。

    在学习alloc之前要知道一下runtime是什么,runtime的字面意思是运行时,runtime具体是指由C、C++、汇编实现的一套API,从OC到C语言的过渡增加了运行时功能。

    一、给alloc添加断点调试:

    首先以一个Person的类为例来讲:

    Person *obj = [Person alloc];

    调用alloc方法,实际上是runtime使用objc_msgSend进行消息转发来实现的方法,接下来来给alloc加上一个全局断点:

    alloc的全局断点

    二、一步步分析objc源码

    运行应用断点会来到alloc的汇编分析:

    alloc的汇编分析

    从这两行汇编代码中可以看出来,alloc实际上调用的是libobjc里的_objc_rootAlloc方法,接下来查看官方objc源码(苹果官网opensource里下载)来找到这个方法.

    alloc方法

    从alloc源码方法里可以看到跟在汇编里调用的方法都是_objc_rootAlloc,接下来再进去_objc_rootAlloc方法看:

    _objc_rootAlloc方法

    由上可以看到_objc_rootAlloc方法的返回值有个callAlloc,继续点进去会进去callAlloc方法,接下来会走:

    callAlloc方法实现 返回实例对象

    三、最终实现

    此时的obj这个返回值已经是我们需要的实例对象了,它是通过class_createInstance方法来实现,class_createInstance最终会调用initIsa来创建实例对象并返回;

    initIsa

    最终alloc的作用是通过类来创建实例对象。

    相关文章

      网友评论

          本文标题:runtime底层之alloc的底层探究

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