美文网首页
alloc探索

alloc探索

作者: 小糾丶羯 | 来源:发表于2020-09-05 22:58 被阅读0次

alloc初探

我们运行如下代码:


image.png

通过控制台,我们可以看到打印结果如下:


image.png
可以看到打印的是同一个对象,不同的只是它们的指针地址(右边箭头所示),指向同一块内存0x600002946760(左边箭头所示)。说明alloc就是在创建对象了,哪对象创建的具体过程是怎样的呢?这时就要查看alloc的源码实现了。
选中alloc并点击Jump to Definition 或者control+command+alloc 然后选中NSObject并跳转进去,发现只有alloc方法的声明:
image.png

怎么办呢?这里教大家一些方法:
1、control+Step into


image.png
2、通过汇编查看(Debug--->DebugWorkflow--->Always show Disassembly)
image.png
这里我们使用第一种方式,如图所示:
image.png
发现这里调用的是objc_alloc,我们添加一个符号断点看一下:
image.png
发现是libobjc.A.dylib,接下来就要开始探究libobjc

libobjc源码探索

运行代码,并添加符号断点objc_alloc,它会进入objc_alloc,如图:


image.png

接下来会进入callAlloc(第一次)


image.png
一步步往下走,发现这里进行了一次objc_msgSend
image.png

搜索alloc,如图:


image.png
进入_objc_rootAlloc,如图:
image.png
又来到了callAlloc这个方法中(第二次),两次参数不同
image.png
进入_objc_rootAllocWithZone(cls, nil),如图:
image.png
进入_class_createInstancesFromZone,如图:
image.png

这里面都进行了哪些操作呢?这里我们来看一下:
1、计算需要开辟的内存大小,同时进行了字节对齐(16字节)


image.png
2、根据计算的大小去申请内存
image.png
3、将对象与申请的空间进行绑定并返回
image.png
下面是流程图:
image.png

相关文章

  • alloc底层原理探索流程

    alloc底层原理探索 为什么要alloc底层探索?在我们开发中经常用到[xxx alloc],但是我知道做了什么...

  • iOS - alloc & init探索(二)

    alloc 源码探索 alloc底层调用顺序: alloc的核心方法 _class_createInstanceF...

  • alloc探索

    alloc初探 我们运行如下代码: 通过控制台,我们可以看到打印结果如下: 可以看到打印的是同一个对象,不同的只是...

  • alloc探索

    alloc流程: 系统级别就把NSObject的初始化做了,所以NSObject的alloc的调用关系是: all...

  • iOS 底层探索 - 类

    iOS 底层探索系列iOS 底层探索 - alloc & initiOS 底层探索 - calloc 和 is...

  • OC底层原理系列文集

    1、对象底层之alloc&init&new源码分析+三种探索方式OC底层原理01-alloc流程探索[https:...

  • iOS 底层探索03-内存对齐

    在iOS 底层探索02-alloc/init/new 探索提到了alloc 流程中涉及的一个重要方法:instan...

  • 1.对象原理探究

    alloc 探索 alloc 已经创建了对象 init alloc 实现 原理 源码实现 介绍三种方式 1、下断点...

  • iOS 底层探索 - 应用加载

    iOS 底层探索系列iOS 底层探索- alloc & initiOS 底层探索 - calloc 和 isaiO...

  • iOS 底层探索 - 消息转发

    iOS 底层探索系列iOS 底层探索- alloc & initiOS 底层探索 - calloc 和 isaiO...

网友评论

      本文标题:alloc探索

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