问题/目标分析
探索【NSObject alloc】,实现的具体流程 ,了解底层的具体实现逻辑。
方法分析
通过对OBJC的源码,对alloc 方法,进行逐步断点跟踪解析。
配置好的源码
如果想调试最新版本,可以自己配置项目:
官方源码下载地址:opensource.apple.com macOS-> objc4 -> 右边箭头 下载最新版本
源码配置方法:配置方法 (注意,文章最后target的设置需要添加一步,不然断点不能跟进,设置如下:)
实验步骤
编写代码,进入[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()