- 两者都有
父类收到这条消息早于子类 - +initialize
1、一个类只能调用一次(如下代码,类别实现+initialize,本类+initialize方法将不在调用)
@implementation Person (Run)
+(void)load{
NSLog(@"Person (Run) load");
}
+(void)initialize{
NSLog(@"Person (Run) initialize");
}
@end
2、不调用类的方法将不会调用
3、+initialize方法可能被调用不止一次
比如:子类未实现initialize方法,父类+initialize方法将调用两次
4、第一次使用类的时候才会调用
5、用线程安全的方式调用
6、父类调用早于子类
+load
1、app启动,类或者类别被加载到运行时的时候调用
2、尽管你不调用类的任何方法也将调用
3、如果在类别中实现+load,则为每个类调用一次,类别调用一次
4、Framework classes 将在这个时候加载
5、C++ static initializers are not loaded
6、在main()函数调用之前调用
7、在这里使用自动释放对象是不安全的
8、调用顺序 父类>子类>类别使用场景
-
+load
方法交换
+initialize
1、不要在+initialize做繁重的工作
2、在这个方法里检查是不是本类调用自己
+(void)initialize{
NSLog(@"Person initialize");
if(self == [Person self]){
NSLog(@"Person if initialize");
}
}