美文网首页
OC---alloc底层探索

OC---alloc底层探索

作者: 疯狂一生 | 来源:发表于2020-09-06 20:59 被阅读0次

    iOS的开发人员都知道,我们创建一个新的对象的时候,都会用到alloc、init等方法,但是具体alloc是如何创建对象的,它的流程是如何的,我们一般都没做过深入的了解,现在我们就一起探索一下:

    一、 如何查看alloc底层代码运行代码

    第一种方法:通过摁住control - step into

    ![在这里插入图片描述](https://img-blog.csdnimg.cn/2020090618465156.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMwOTYzNTg5,size_16,color_FFFFFF,t_70#pic_center)

    1

    第二种方法: 符号断点查看源码出处

    第三种方法: 汇编查看跟流程

    二、 在源码库中去找alloc的执行步骤

    源码库下载

    在源码库中找到objc4-781这个库,这个事现在最新的库:

    然后在这个库中去查看alloc是如何起作用的。

    三、alloc 流程图:

    alloc 的核心方法:

    cls->instanceSize : 先计算出所需要的内存空间的大小

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

    obj->initInstanceIsa : 关联到相关的类

    注:16字节对齐的作用? 为了访问安全

    四、 init的作用:

    + (id)init {    return (id)self;}

    init是构造方法,工厂设计。在对象实例化的时候被调用。我们看源码发现它返回的是自身,这主要是为了开放自定义接口,方便开发人员自定义自己需要的方法。

    五、 new的作用:

    + (id)new {    return [callAlloc(self, false/*checkNil*/) init];}

    经过源码的查看,发现new 相当于 alloc和init的组合。

    缺点是new出来的对象,不会走自定义的init方法。直接走的是NSObject 的init。所以不建议开发时候使用。

    相关文章

      网友评论

          本文标题:OC---alloc底层探索

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