我需要这样做吗:
+(void)initialize{
...my stuff...
[super initialize];
}
也就是说,如果我在我的 App Delegate 中initialize从父类 ( NSObject) 覆盖,我需要确保超级实现也被调用?或者这不适用,因为这不是实例方法?
这种方法有多“安全”?我正在实现 iNotify 库,文档建议将设置添加到此方法,但我以前没有将它用于应用程序中的任何内容,并且还想知道它是否可能与其他意外冲突?
我需要这样做吗:
+(void)initialize{
...my stuff...
[super initialize];
}
也就是说,如果我在我的 App Delegate 中initialize从父类 ( NSObject) 覆盖,我需要确保超级实现也被调用?或者这不适用,因为这不是实例方法?
这种方法有多“安全”?我正在实现 iNotify 库,文档建议将设置添加到此方法,但我以前没有将它用于应用程序中的任何内容,并且还想知道它是否可能与其他意外冲突?
如果您有此类的子类,则最好使用 dispatch_once 语句调用您的代码,因为每个子类将再次调用此方法
+(void)initialize
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^
{
//Your Code
});
}
有关详细信息,请参阅Mike Ash的这篇博文。
运行时向程序中的每个类发送初始化,就在类或从它继承的任何类从程序内发送其第一条消息之前。运行时以线程安全的方式将初始化消息发送到类。超类在其子类之前收到此消息。如果子类没有实现 initialize(运行时将调用继承的实现)或子类显式调用 [super initialize],则超类实现可能会被多次调用。如果您想保护自己免于被多次运行,您可以按照以下方式构建您的实现:
从而使两者
+ (void)initialize
{
...
}
和
+ (void)initialize
{
[super initialize];
...
}
有效的。