NSObject类中有两个方法:
+ (void)load;
+ (void)initialize;
如果多个类继承NSObject类,那在所有的子类在程序启动的时候,都会调用load方法,
在调用load这个方法要分几种情况:
1、如果在load方法里面调用[self class]时候,会调用initialize方法,
2、如果在load方法里面没有调用[self class],就不会调用initialize方法,
有多个类继承NSObject,
例如:
@interface testObjsct1 :NSObject
@end
@interface testObjsct2 :NSObject
@end
@interface testObjsct3 :NSObject
@end
会一次调用testObjsct3,testObjsct1,testObjsct2里面的load方法,
如果一个类继承NSObject类,第二类继承第一个类,第三个类继承NSObject类,
@interface testObjsct1 :NSObject
@end
@interface testObjsct2 : testObjsct1
@end
@interface testObjsct3 :NSObject
@end
此时首先调用testObjsct3的方法load,然后在调用testObjsct3的方法load,在调用testObjsct2的方法load,没有在load方法里面使用[self class],就不会调用initialize方法,
@interface testObjsct1 :NSObject
@end
@interface testObjsct2 : testObjsct1
@end
在testObjsct1没有load方法,有initialize方法,在testObjsct2有load方法,没有initialize方法,在testObjsct2里面的load方法调用[self class]时,会调用testObjsct1里面的initialize方法,然后会在调用testObjsct1的initialize方法一次,但是类显示testObjsct2,方法是testObjsct1里面的initialize。