+ (void)initialize;
- 在接收到第一个消息之前初始化该类;
讨论区
-
运行时在将类或从其继承的任何类从程序内部发送其第一条消息之前,将初始化发送到程序中的每个类。超类在其子类之前收到此消息。
-
运行时以线程安全的方式将初始化消息发送给类。也就是说,initialize由第一个线程运行以将消息发送给类,而其他任何试图向该类发送消息的线程都将阻塞,直到初始化完成为止。
-
如果子类不实现初始化(运行时将调用继承的实现),或者子类显式调用[super initialize],则可以多次调用超类实现。如果要保护自己免于多次运行,可以按照以下方式来构造实现:
+(void)initialize {
if(self == [ClassName self]){
// ...进行初始化...
}
}
- 由于初始化是以阻塞的方式进行的,因此将方法的实现限制为尽可能少的必要工作非常重要。具体来说,任何其他类在其initialize方法中可能需要使用锁的代码都容易导致死锁。因此,您不应依赖初始化来进行复杂的初始化,而应将其限制为简单的类本地初始化。
特别注意事项
- 每个类仅调用一次initialize。如果要对类和类的类别执行独立的初始化,则应实现load方法。
网友评论