1. 调用时机
load方法:
load
方法会在 第一次初始化这个类之前 被调用,我们用它来初始化静态变量。它会在main
函数之前调用,先调用类中的,再调用类别中的(类别中如果有重写)
initialize方法:
当向该类发送第一个消息(一般是类消息首先调用,常见的是alloc)的时候,initialize方法就会被调用。先调用类中的,再调用类别中的(类别中如果有重写);如果该类只是引用,没有调用,则不会执行initialize方法。
两者方法的共同点:会自动调用父类的方法,不需要super操作;自动调用仅仅会调用一次(不包括外部显式调用)。
2. 总结
如果你实现了
+ load
方法,那么当类被加载时它会自动被调用。这个调用的时间非常早。如果你实现了一个应用或框架的+ load
,并且你的应用链接到这个框架上了,那么+ load
会在main()
函数之前被调用。如果你在一个可加载的 bundle 中实现了+ load
,那么它会在 bundle 加载的过程中被调用。+ initialize
方法的调用看起来会更合理,通常在它里面写代码比在+ load
里写更好。+ initialize
是懒调用的,它有可能完全不被调用。类第一次被加载时,+ initialize
不会被调用。类接收消息时,运行时会先检查+ initialize
有没有被调用过。如果没有,会在消息被处理前调用。如果子类如果有重写
+ initialize
,则在init之前会调用自己的+ initialize
;如果没有的话就调用父类的+ initialize
。