美文网首页专注iOS开发的小渣渣日常
OC底层探索01-找到底层探索的钥匙

OC底层探索01-找到底层探索的钥匙

作者: Henry________ | 来源:发表于2020-09-09 01:17 被阅读0次

    作为一位iOS开发者,如何才能开启自己的底层探索之路呢?每当点击系统API无法跟进实现只能浅尝辄止的时候,有没有想过怎样才能看到底层源码的真容,而不是在还没开始就结束了呢?本文中会提供三种方式来一探底层的魅力。

    Apple的小心思

    这句代码应该非常熟悉了吧?可是想知道alloc具体是如何实现对象的创建呢?

    NSObject *henry = [NSObject alloc];
    

    使用⌘ + 左键你只能看到这些:

    没有注释,也再无法跟进,显然Apple不想让你看到底层是如何实现的?可是这样就放弃了吗?

    三种源码探索的方式:

    1. 使用Xcode提供的符号断点方式
    2. 使用Xcode提供的分步调试方式
    3. 通过汇编方式

    下面就这三种方式一一说明:

    1. 符号断点

    • 第一步: 添加符号断点


    选择Symbolic Breakpoint

    将想要探索的API输入Symbol中

    • 第二步:为自己输入的代码增加断点


    • 第三步:先关闭符号断点
      因为alloc系统API,会在很多地方调用,避免影响我们观察。

    • 第四步:Run起来吧~
      等待系统执行触发第二步断点后,我们打开第三步断点
      这样可以避免绝大多数的干扰。

    • 第五步:


    libobjc.A.dylib这个库就是alloc的源码所在。

    2. 分步调试

    如果在你增加了对应API的符号断点还是无法精确找到源码库名的时候,第一种方式就不够用了。

    • 第一步:为自己输入的代码增加断点,run后等待断点触发
      这一步与之前的操作相同。

    • 第二步:使用control + step into

    • 第三步:为objc_alloc增加一个符号断点
    • 第四步:找到对应源码库名


    通过这种方式可以更加精确的找到系统API对应的库名。

    3. 汇编方式

    • 第一步:为自己输入的代码增加断点,run后等待断点触发
      重复步骤

    • 第二步:打开汇编开关


    第二步需要注意:第一步已经断点已经触发。否则...

    • 第三步:


    触发断点下一步是寄存器的处理,无需关注。直接找到callqobjc_alloc

    • 第四步:为objc_alloc增加一个符号断点

    • 第五步:找到对应源码库名


    这一步是最为常用的。

    当然还有其他方法,有知道的大佬可以留言指教.

    apple源码库

    苹果开源源码汇总
    苹果开源源码

    相关文章

      网友评论

        本文标题:OC底层探索01-找到底层探索的钥匙

        本文链接:https://www.haomeiwen.com/subject/ptpsektx.html