我应该拨打super in + initialize吗?

joh*_*ers 8 iphone objective-c ipad

我需要这样做:

+(void)initialize{
     ...my stuff...
  [super initialize];
 }
Run Code Online (Sandbox Code Playgroud)

也就是说,如果我initializeNSObject我的App Delegate中的父类()覆盖,我需要确保超级实现也被调用?或者这不适用,因为这不是实例方法?

这种方法有多"安全"?我正在实现iNotify库,文档建议将此设置添加到此方法中,但我以前没有将它用于应用程序中的任何内容,并且还想知道它是否可能与其他意外冲突?

Den*_*lov 7

如果你有这个类的子类,你最好使用dispatch_once语句调用你的代码,因为每个sublcass将再次调用这个方法

+(void)initialize
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^
    {
        //Your Code
    });
}
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅Mike Ash撰写的博文.

  • 声明"运行时将初始化初始化到程序中的每个类只有一次"可能会被误解,至少它是由我来做的!如果B是A的子类,则+ initialize仅发送给A一次.但它也被发送给B一次,如果B没有覆盖+初始化,那么[B initialize]将调用A中实现的方法,因此该方法被调用两次(但对于不同的类). (2认同)