在中高级iOS开发岗位面试时,关于iOS的一些底层知识,底层实现是一定会被问到的。比如最常见的的对象底层实现,alloc做了什么……
那么问题来了,可能大家都有好奇过这些东西,command+右键 点击进去想研究一番,但是往往看到的结果是这样的:
API点击进不去,没有文档,然后就没有然后了,好奇心就戛然而止了。
下面介绍几种探索源码的方式:(找到对象所在的库,然后到苹果源码库中看是否有开源)
1、符号断点查看
-
先真机执行到断点位置,复制 alloc 方法,下符号断点:
-
接着点击Continue program execution 键 进入下一步,可以看到:libobjc.A.dylib --> _objc_rootAlloc
-
继续点击 step into ↓键: libobjc.A.dylib --> _objc_rootAlloc -->_objc_rootAllocWithZone
如果感觉alloc 符号断点,对象太多,我们走到后面:objc_alloc 、_objc_rootAlloc 时候 可以直接下该方法的符号断点。
2、 断点 --> contro键+step into 进入
-
使用真机执行代码,断点执行到DSPerson位置
-
按住 control键,点击 step into ↓键 (注意图标会有变化)
-
点击三下看到如下结果:alloc 底层调用了 objc_alloc
-
继续点击看到: 是调用了 libobjc.A.dylib --> objc_alloc -->_objc_rootAllocWithZone
3、Xcode --> Debug -->Debug Workflow --> Always Show Disassembly:
-
接着我们会看到:alloc 底层调用了 objc_alloc
-
然后再下一个 objc_alloc 的符号断点,点击 Continue program execution 键 就会看到: libobjc.A.dylib --> objc_alloc -->_objc_rootAllocWithZone
注:
1、Apple 所有开源源码汇总地址,根据相应的版本查找对应的源码,以mac 10.15为例: macOS --> 10.15 --> 选择10.15 --> 搜索 objc
2、Apple 比较直接的源码下载地址,直接搜索想要下载的源码名称即可,例如objc
:直接搜索 objc --> objc4/ --> 选择相应的objc的版本