1.在创建对象时一般使用 [[NSobject alloc] init]来创建对象,问创建对象过程中的alloc 和 init 分别做了些什么?
- 我们分别创建3个NSObject对象 如下图方式创建 打印结果这3个对象为同一个对象

- 我们再打印这3个对象的地址,发现3个地址指向的为同一个内存空间

- 可见 alloc 已经创建了对象 那么 alloc 是怎么创建的对象呢?
我们右键跳转跟踪进去
到此发现,已无任何源码实现,无法窥探alloc是如何创建的。
2.如何窥探alloc到底如何创建对象?
- 代码下断点探究,按住control键,点击图中箭头所指方向点击多次可进入 objc_alloc 方法

此时继续走会发现进入一个 pushq jmp的循环 此时可放弃,同样的操作使用真机调试,发现来到 objc_alloc方法 接着来到 libobjc.A.dylib动态库里 _objc_rootAllocWithZone 然后到了 objc_msgSend方法

- 下符号断点(Symbolic Breakpoint)探究
先下个alloc符号断点进入
点击in 会进入objc_alloc libobjc.A.dylib动态库里 _objc_rootAllocWithZone 然后到了 objc_msgSend方法
这样一直in下去
- 汇编探究
点击Debug->Debug Workflow 选中Always Show Disassembly 可看到objc_alloc 打断点 Control+in 继续走可进入libobjc.A.dylib动态库里