一 load:
load方法在类加载进运行时系统(runtime)时会调用,在main函数之前,不管你有没有用到这个类
调用顺序:先执行父类load方法,然后执行子类的load方法,load 方法不遵从继承规则,如果类本身没有实现load方法,那么系统就不会调用,不管父类有没有实现
load方法是线程安全的
load 方法中最常用的就是方法交换method swizzling
二 initialize
第一次向类发送消息时才会调用,import或者定义类不会调用
调用顺序:initialize 遵循继承规则,初始化子类(A1)的的时候会先初始化父类(A),然后先调用父类的initialize方法,然后调用子类的initialize方法,如果再有子类(A2),如果没有重写initialize,那么就会调用父类的initialize方法,所以initialize方法可能会执行很多次,如果不做判断
+ (void)initialize {
if (self == [People class]) {
NSLog(@”%@ initialize”, self);
}
}
initialize方法是线程安全的
initialize方法也需要尽量精简,一般只应该用来设置内部数据,比如,某个全局状态无法在编译期初始化,可以放在initialize里面