iOS-底层原理 01:源码探索方法

本文旨在介绍如何查找到 所属的。有以下三种方法,以alloc为例介绍。

1. 跟流程

  • alloc打断点方式

    • Xcode左上角位置,如图所示:


      iOS-底层原理 01:源码探索方法_第1张图片
      image.png
    • 在符号断点输入alloc
      iOS-底层原理 01:源码探索方法_第2张图片
      alloc断点
  • 在ViewController中的LGPerson处断点
    注意:在走到alloc断点之前,需要关闭上面新增的符号断点,原因是因为alloc的调用有很多,如果开启了就不能准确的定位到LGPersonalloc方法。

    iOS-底层原理 01:源码探索方法_第3张图片
    LGPerson断点

    • 断点打开状态如图所示:


      断点开
    • 断点关闭状态


      断点关闭
  • Xcode运行程序,断在LGPerson处,然后打开alloc 断点

    • 再点击继续运行


      iOS-底层原理 01:源码探索方法_第4张图片
      继续运行

      然后可以看出alloc符号断点断住的堆栈调用情况,如图所示:


      alloc符号堆栈调用图

从上图可知alloc是调用了底层libobjc.A.dylib库的_objc_rootAlloc函数。

2. 按住control+step into寻找

  • 同方法1一样在LGPerson处断点,关闭alloc断点,重新运行程序,断点停在LGPerson处。
  • 按住control键,选择 step into

    进入后可看到如图所示:
    image.png
  • 参考方法1添加objc_alloc断点符号,可以看到符号断点显示了in libobjc.A.dylib内容。由此我们已经找到了底层库名称
    iOS-底层原理 01:源码探索方法_第5张图片
    image.png
  • 点击继续运行,就找到了libobjc.A.dylib库,而且看到了底层调用了更深一级的_objc_rootAllocWithZone。
    iOS-底层原理 01:源码探索方法_第6张图片
    image.png

3. 汇编查找

  • 同方法1一样,保留[LGPerson alloc]断点,移除符号断点。Xcode开启运行,程序到达[LGPerson alloc]断点。
  • 在顶部文件导航栏打开Debug -> Debug Workflow -> Always show Disassembly。这个选项表示始终显示反汇编。如图所示:
    iOS-底层原理 01:源码探索方法_第7张图片
    反汇编步骤

    按下图中2种方式都可找到libobjc.A.dylib底层库
    iOS-底层原理 01:源码探索方法_第8张图片
    image.png
  • 最后查找到libobjc.A.dylib底层库

以上就是源码探索方式的三种方法!
源码探索方法介绍完毕,接下来就是下载源码。进入源码地址 ,下载 objc4-781.tar.gz 。

你可能感兴趣的:(iOS-底层原理 01:源码探索方法)