先看一下下面三行代码
ZKCPerson *p1 = [ZKCPerson alloc];
ZKCPerson *p2 = [p1 init];
ZKCPerson *p3 = [p1 init];
思考一下:p1 p2 p3是不是同一个对象?
debug看一看打印结果:
20201118153406.jpg
结果:是一个
再思考一个问题:这三个指针地址是不是一样的呢?看下打印结果:
20201118153626.jpg
结果:不是一个
思考一个问题:alloc怎么创建的对象 alloc和init分别做了什么?
是不是瞬间想看看alloc是怎么实现的呢?不着急,接下来介绍三种常用的方法:
-
直接代码下断点(连真机,x86模拟器是不行的)(方法:按住ctl进入断点)看到的是这个:
20201118155751.jpg
看见了objc_alloc。。。sure 就是这个,继续下去。。。
20201118160025.jpg
哈,看到了在这个库libobjc.A.dylib
-
Xcode左下角找到符号断点
20201118160631.jpg
20201118161531.jpg
20201118161703.jpg
哈,也看到了在这个库libobjc.A.dylib
-
汇编
20201118162053.jpg
20201118162319.jpg
继续方法1的ctl+in 最后也能看到在这个库libobjc.A.dylib