本文主要介绍iOS探索源码的三种方式:
-
符号断点直接跟流程 - 通过按住
control+step into - 汇编跟流程
下面详细描述三种探索源码的方式:
1. 符号断点直接跟流程
由于是alloc方法的实现无法看到,故下一个'alloc'的符号断点。

添加符号断点
在
SLPerson创建的行添加一个断点,同时暂时取消刚刚添加的alloc的断点,运行工程~
断点
此时打开
alloc的符号断点,点击Continue program execution过掉断点,可以看到程序断点在了libobjc.A.dylib中的[NSObject alloc]方法,由此可知alloc方法的源码在libobjc.A.dylib库中。
libobjc.A.dylib
2. 通过按住control + step into
在SLPerson创建的行添加一个断点,运行工程,当进入断点后按住control键,点击step into按钮~

step into
进入断点后看到以下内容

断点
根据显示再下一个
objc_alloc的符号断点后点击Continue program execution按钮过掉当前断点,可以看到进入了libobjc.A.dylib中的objc_alloc函数,由此可知alloc方法的源码在libobjc.A.dylib库中。
断点
3. 汇编跟流程
在SLPerson创建的行添加一个断点,运行工程,当进入断点后选择Xcode的Debug菜单中的Debug Workflow中的Always show disassembly选项

Always show disassembly
可以看到断点变成了如下模样

断点
根据显示再下一个
objc_alloc的符号断点后点击Continue program execution按钮过掉当前断点,可以看到进入了libobjc.A.dylib中的objc_alloc函数,由此可知alloc方法的源码在libobjc.A.dylib库中。
断点
Apple开源源码下载地址
1、Apple所有开源源码汇总地址,根据相应的版本查找对应的源码,以mac 10.15为例:macOS --> 10.15 --> 10.15 --> 搜索objc
2、Apple比较直接的源码下载地址,直接搜索库名即可,例如command+f输入objc,选择objc4 --> 选择所需版本