当我们日常写Bug
的时候,想学习下苹果爸爸的源码,却发现只能在外面蹭一蹭
,无法深入探索。如下图:

定位源码的三种方法
查找指定函数的底层源码:本文以Person类的alloc方法为例
-
符号断点
直接跟流程 - 通过按住
control + step into
-
汇编
跟流程
方法一:符号断点直接跟流程
-
通过下
alloc
的符号断点-
选择断点
Sysbolic Breakpoint
Add Sysbolic Breakpoint .png
-
符号断点中输入
alloc
输入符号断点.png
-
此时已经给 Person
类添加好了断点,需要注意的是:当运行程序前需要将alloc
符号断点关闭,因为运行程序,将会有很多类调用alloc
。如下图:

当程序运行到Person
类创建初始化这一行代码,将alloc
符号断点打开,点击下一步就可以看到添加的符号断点在苹果源码的位置。如下图所示:

方法二:control + step into
如下图所示,在Person
创建初始化的地方添加断点,程序运行到这行

按住键盘的control
键 + 鼠标点击Xcode日志栏的step into
按钮,一下不行就点两下,出现如下图所示

如下图所示添加objc_alloc
符号断点,就能显示对应函数所在源码库

方法二:汇编查找
同样的如下图所示,在Person
创建初始化的地方添加断点,程序运行到这行

然后接着开启Xcode的显示反汇编,如下图所示

接下来就会显示对应的汇编信息,真机和模拟器的汇编信息是不一样的。

接下来同样的添加objc_alloc
符号断点,显示对应函数所在源码库

建议大家使用第三种方法,别问为什么?问就是能装b
,接下来会整理一篇简单的汇编知识。
App提供的源码下载地址:
1、Apple 所有开源源码汇总地址,根据相应的版本查找对应的源码,以mac 10.15为例:macOS --> 10.15 --> 选择10.15 --> 搜索 objc
2、Apple 比较直接的源码下载地址,直接搜索想要下载的源码名称即可,例如objc
:直接搜索 objc --> objc4/ --> 选择相应的objc的版本
网友评论