类的启动过程
1.+load方法
- 在程序启动的时候会加载所有的类和分类,并调用所有类和分类的+load方法(只会调用一次)
- 先加载父类,再加载子类;也就是先调用父类的+load,再调用子类的+load
- 先加载元原始类,再加载分类
- 不管程序运行过程有没有用到这个类,都会调用+load加载
@implementation Person + (void)load { NSLog(@"%s", __func__); } @end @implementation Student : Person + (void)load { NSLog(@"%s", __func__); } @end 输出结果: +[Person load] +[Student load]
2.+initialize
- 在第一次使用某个类时(比如创建对象等),只会调用一次+initialize方法
- 一个类只会调用一次+initialize方法,先调用父类的,再调用子类的
@implementation Person + (void)initialize { NSLog(@"%s", __func__); } @end @implementation Student : Person + (void)initialize { NSLog(@"%s", __func__); } @end int main(int argc, const char * argv[]) { Student *stu = [Student new]; return 0; } 输出结果: +[Person initialize] +[Student initialize]