ios底层原理探索 - OC对象(上)

147 阅读1分钟

前言

在这之前,我从没有想过,alloc方法能扯出这么多东西来,但今天确实扯出这么多,如有错误之处,欢迎指正哈~~~

1.三种方式探究alloc方法

1.1 符号断点跟踪流程

Pasted Graphic 9.png

先在Person *p = [Person alloc] ;设置断点

Pasted Graphic 9.png

1、通过lldb命令行设置符号断点

Pasted Graphic 13.png

关于lldb常用命名如下所示

  • 设置断点
  • $breakpoint set -n XXX
  • set 是子命令
  • -n 是选项 是--name 的缩写!
  • 查看断点列表
  • $breakpoint list
  • 删除
  • $breakpoint delete 组号
  • 禁用/启用
  • $breakpoint disable 禁用
  • $breakpoint enable 启用
  • 继续执行
  • $continue c
  • 单步运行,将子函数当做整体一步执行
  • $n next
  • 单步运行,遇到子函数会进去
  • $s
  • 查看堆栈调用信息
  • $bt

2、通过xcode设置符号断点

No Breakpoints.png

m main.m.png

通过设置的符号断点、堆栈信息的调用顺序,我们可以看到 alloc 的源码位于libobjc.A.dylib库中,探索更深入细致的alloc流程需要下载 objc源码方可探究

Pasted Graphic 11.png

1.2 通过按住control+step into方式

  • Step into
  • Step into instruction (hold Control)
  • Step into Thread (hold Control-Shift)

Pasted Graphic 15.png

Pasted Graphic 16.png

通过objc_alloc符号断点可以看出源码所在的库

1.3 通过汇编跟流程

xcode 工具栏 选择 Debug --> Debug Workflow --> Always Show Disassembly

Eator Produnt Detso Sounce Ceatrel Wndow Meip.png 通过control+step into单步往下走,同样来到了objc_alloc方法。

001646c434 &4 109 $0030, Nrs.png

Pasted Graphic 19.png

2.源码跟踪alloc流程

源码准备,objc4-818.2

alloc的主要流程图

alloc流程图.png

apple源码下载的地址:

1.apple已开放的所有源码集合,下载地址请移步

2.按需下载,源码搜索使用,下载地址请移步

objc4-818.2(可编译)下载链接