iOS 底层原理 iOS 进阶之路

OC底层原理一:定位源码(欢迎来到底层世界)

2020-09-10  本文已影响0人  markhetao

OC底层原理 学习大纲

欢迎来到底层世界,让我们一起打开通往底层世界的大门。

入门的三种方式:

查找指定函数底层源码: 本文以Person对象的alloc函数为例

  1. 符号断点跟流程
  2. control + step into
  3. 汇编查找

方法一: 符号断点跟流程

tips: 断点高亮色启动,鼠标左键再点一下会置灰,表示取消断点

手动断点.png

step1: Xcode左上角切换到断点调试面板

断点调试面板.png

step2: Xcode左下角点击+号,点击Symbolic Breakpoint

符号断点.png

step3: 输入alloc,按键盘Enter键确认

alloc.png

step1: 将alloc符号断点置灰

alloc函数在很多地方被调用,在到达我们目标位置前,先置灰。

step2: Xcode开启运行,程序到达[Person alloc]断点后, 开启符号断点。

step3: 点击 Xcode日志栏的继续运行按钮

继续运行.png

可以看到alloc是调用了底层libobjc.A.dylib_objc_rootAlloc函数。

libobjc.A.dylib.png

恭喜你,你已成功找到底层入口

现在你可以选择进入下一篇章,**OC底层原理二:objc4-781编译环境** (真实的底层世界)


方法二:control + step into

step1: 同方法一一样,保留[Person alloc]断点,移除符号断点。

step2: 运行程序,进程停留在[Person alloc]断点处时,

setp3: 按住键盘control键+鼠标点击 Xcode日志栏的step into按钮

进入.png

进去后可以看到objc_alloc:

objc_alloc.png

step4: 加入objc_alloc符号断点(参照方法一符号断点操作流程,将内容改为objc_alloc

image.png

(其实我们已经看到符号断点显示了in libobjc.A.dylib内容。我们已经找到了底层库名称)

step5:点击 Xcode日志栏的继续运行按钮

继续运行.png

就找到了libobjc.A.dylib库,而且看到了底层调用了更深一级的_objc_rootAllocWithZone

关于_objc_rootAllocWithZone_objc_rootAlloc的关系,后面解析alloc时,会详细讲到。

image.png
libobjc.A.dylib.png

方法三: 汇编查找

step1: 同方法一一样,保留[Person alloc]断点,移除符号断点。Xcode开启运行,程序到达[Person alloc]断点后。

step2: 在顶部文件导航栏打开Debug -> Debug Workflow -> Always show Disassembly
这个选项表示始终显示反汇编

image.png

按图中2种方式都可找到libobjc.A.dylib底层库

image.png libobjc.A.dylib.png

恭喜你,已掌握了三种寻找底层的方法

让我们进入下一篇章,OC底层原理二:objc4-781编译环境** (真实的底层世界)

上一篇 下一篇

猜你喜欢

热点阅读