【NSObject alloc】 流程图

205 阅读1分钟

问题/目标分析

探索【NSObject alloc】,实现的具体流程 ,了解底层的具体实现逻辑。

方法分析

通过对OBJC的源码,对alloc 方法,进行逐步断点跟踪解析。
配置好的源码
如果想调试最新版本,可以自己配置项目:
官方源码下载地址:opensource.apple.com macOS-> objc4 -> 右边箭头 下载最新版本
源码配置方法:配置方法 (注意,文章最后target的设置需要添加一步,不然断点不能跟进,设置如下:)

pic

实验步骤

编写代码,进入[NSObject alloc]流程,进行解析。

结果分析

通过对断点进行跟踪,整理代码逻辑流程。

其中malloc,initisa,具体流程看下面文章。
1、calloc() 流程分析
2、isa/super 解析实验

总结实验

从实验中,可以看到【NSObject alloc】对不同类型类别的区别处理,awz加速创建,处理流程中对属性的8字节对齐,对类别的16字节对齐,calloc和isa创建的具体流程位置。 alloc 执行时,alloc会跳转objc_alloc(),callAooc(),然后才是 _objc_rootAlloc(),分析为fixupMessageRef中,在编译工作中做了处理,将alloc() 换成了objec_alloc()