+ load
作为 Objective-C 中的一个方法,与其它方法有很大的不同。它只是一个在 整个文件被加载到运行时,在 main
函数调用之前被 ObjC 运行时调用的钩子方法。
其中关键字有这么几个:
- 文件刚加载
main
函数之前- 钩子方法
我在阅读 ObjC 源代码之前,曾经一度感觉自己对 + load
方法的作用非常了解,直到看了源代码中的实现,才知道以前的以为,只是自己的以为罢了。
这篇文章会假设你知道:
- 使用过
+ load
方法 - 知道
+ load
方法的调用顺序(文章中会简单介绍)
在这篇文章中并不会用大篇幅介绍 + load
方法的作用其实也没几个作用,关注点主要在以下两个问题上:
+ load
方法是如何被调用的+ load
方法为什么会有这种调用顺序
load 方法的调用栈
首先来通过 load
方法的调用栈,分析一下它到底是如何被调用的。
下面是程序的全部代码:
// main.m
#import <Foundation/Foundation.h>
@interface XXObject : NSObject @end
@implementation XXObject
+ (void)load {
NSLog(@"XXObject load");
}
@end
int main(int argc, const char * argv[]) {
@autoreleasepool { }
return 0;
}