你真的了解load方法么?
本文授权转载,作者: 左书祺 (关注仓库,及时获得更新: iOS-Source-Code-Analyze ) 因为 ObjC 的 runtime 只能在 Mac OS 下才能编译,所以文章中的代码都是在 Mac OS,也就是 x86_64 架构下运行的,对于在 arm64 中运行的代码会特别说明。 写在前面 文章的标题与其说是问各位读者,不如说是问笔者自己:我真的了解 + load 方法么? + load 作为 Objective-C 中的一个方法,与其它方法有很大的不同。 它只是一个在整个文件被加载到运行时,在 main 函数调用之前被 ObjC 运行时调用的钩子方法。 其中关键字有这么几个: 文件刚加载 main 函数之前 钩子方法 我在阅读 ObjC 源代码之前,曾经一度感觉自己对 + load 方法的作用非常了解,直到看了源代码中的实现,才知道以前的以为,只是自己的以为罢了。 这篇文章会假设你知道: 使用过 + load 方法 知道 + load 方法的调用顺序(文章中会简单介绍) 在这篇文章中并不会用大篇幅介绍 + load 方法的作用其实也没几个作用,关注点主要在以下两个问题上: + load 方法是如何被调用的 + load 方法为什么会有这种调用顺序 load 方法的调用栈 首先来通过 load 方法的调用栈,分析一下它到底是如何被调用的。 下面是程序的全部代码: