前言
在这之前,我从没有想过,alloc方法能扯出这么多东西来,但今天确实扯出这么多,如有错误之处,欢迎指正哈~~~
1.三种方式探究alloc方法
1.1 符号断点跟踪流程
先在Person *p = [Person alloc] ;设置断点
1、通过lldb命令行
设置符号断点
关于lldb常用命名
如下所示
- 设置断点
- $breakpoint set -n XXX
- set 是子命令
- -n 是选项 是--name 的缩写!
- 查看断点列表
- $breakpoint list
- 删除
- $breakpoint delete 组号
- 禁用/启用
- $breakpoint disable 禁用
- $breakpoint enable 启用
- 继续执行
- $continue c
- 单步运行,将子函数当做整体一步执行
- $n next
- 单步运行,遇到子函数会进去
- $s
- 查看堆栈调用信息
- $bt
2、通过xcode
设置符号断点
通过设置的符号断点、堆栈信息的调用顺序,我们可以看到 alloc 的源码位于libobjc.A.dylib库中
,探索更深入细致的alloc流程需要下载 objc源码方可探究
1.2 通过按住control+step into方式
- Step into
- Step into instruction (hold Control)
- Step into Thread (hold Control-Shift)
通过objc_alloc符号断点可以看出源码所在的库
1.3 通过汇编跟流程
xcode 工具栏 选择 Debug --> Debug Workflow --> Always Show Disassembly
通过control+step into单步往下走,同样来到了objc_alloc方法。
2.源码跟踪alloc流程
源码准备,objc4-818.2
alloc的主要流程图
apple源码下载的地址:
1.apple已开放的所有源码集合,下载地址请移步
2.按需下载,源码搜索使用,下载地址请移步
objc4-818.2(可编译)下载链接