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