类的启动过程

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]

原文地址:https://www.cnblogs.com/xufengyuan/p/6576619.html