前言
相关文章:
iOS底层探索九(方法的本质下objc_msgSend慢速及方法转发初探)
作为iOS开发,看底层源码基本是必须的,但是很多人都想看源码,但是入门无路,所以在进行底层探索之前,先介绍一篇文章来描述一下我一般是怎么要找底层源码的。
探索底层源码出处:
-
下断点 : control + in
- 符号断点设置:例如alloc 源码
- 代码跟踪
- 汇编探索
1.断点调试设置
例如我们使用alloc代码进行下断点 : control + in
当断点到这里时我们先不做操作,点击键盘中的control键,此时代码进入按键会有变化
此时我们点击框中按钮可以进入到汇编,点击进入
我们可以看到alloc 底层首先会调用objc_alloc方法,当我们继续进入时发现一只是图二,这里就需要讲到我们iOS底层东西了,在我们使用模拟器是,cpu内核使用的x86也就是电脑的架构,而我们手机使用的是armv7 ,armv7s和arm64,arm64E,架构,因为使用不同架构,底层所选择的方法也不一样进入代码也有区别;
所以在这里如果要进入需要选择为真机调试;
修改为真机调试后,我们可以看到alloc进入的是libobjc.A.dylib库中的objc_alloc方法
2.符号断点设置
这个也是我们xcode中自带的功能,因为alloc方法在初始化是后会有很多调用,所以我们还是需要先让代码运行到[person alloc],之后我们点到添加符号断点出,如下图所示
添加完后,我们可以看到,底层确实有很多alloc方法,此时我们继续执行代码,如下如,依然可以看到底层是调用libobjc.A.dylib库,这里为什调用的是[NSObject alloc]后续再进行详细解释
3.汇编调试
这个也是xcode中的工具,缺点是需要了解部分汇编知识;具体设置,如下图所示xcode中顶部选择Debug->DebugWorkflow->Always Show Disassembly,这里我们运行后就能看到汇编指令了
进入汇编页面如下图所示:
很多人看到这里就会有点懵,这里我们只需要知道一些简单的只是例如:bl 为跳转方法,add为加法运算 sub为减法运算等,这里就不过多赘述了;22行打断点进入;
我们发现依旧进入了我们熟悉的libobjc.A.dylib库;调用的是objc_alloc方法;
以上就是我要介绍的3种看底层实现方法,
这里附上苹果开源代码地址:https://opensource.apple.com/source/
我们要看的alloc方法在0bjc-750中, 新版本objc-756.2,可以直接下载进行编译通过