对于加入运行期系统中的每个类(class)及分类(category)来说,必定会调用此方法,而且仅调用一次。通常在应用程序启动的时候,就会执行此方法。如果分类和其所属的类都定义了load方法,则先调用类里面的,再调用分类里面的。
- (void)initialize
对于每个类来说,该方法会在程序首次用该类之前调用,且只调用一次。它是由运行期系统来调用的,绝不应该通过代码直接调用。
首先,它是“惰性调用的”,也就是说,只有当程序用到了相关的类时,才会调用。因此,如果某个类一直都没有使用,那么initialize方法就一直不会运行。这就等于说,应用程序无须先把每个类的initialize都执行一遍,这与load方法不同。对于load来说,应用程序必须阻塞并等着所有类的load都执行完毕,才能继续。
要点
在加载阶段,如果类实现了load方法,那么系统就会调用它。分类里面也可以定义此方法,类的load方法要比分类中的先调用。与其他方法不同,load方法不参与覆写机制。
首次使用某个类之前,系统会向其发送initialize消息。由于此方法遵从普通的覆写规则,所以通常应该在里面判断当前初始化的是哪个类。
无法再编译期设定的全局常量,可以放在initialize方法里初始化。