在你的一个Objective-C课程中实现+ initialize或+ load方法时,你应该始终从这种防守开始吗?:
@implementation MyClass + (void)initialize { if (self == [MyClass class]) { ... } } ... @end
看起来像+ load和+ initialize中的代码通常只想执行一次.所以这有助于避免子类加载/初始化时的重复执行.
我想我只是想从一些ObjC巫师那里得到一些强化,这是必要/常见的做法......
这是什么常见的智慧?你会建议总是这样做吗?
对于+ load和+ initialize,你的建议是否相同,或者它们应该如何处理?
谢谢.
快速回答是:没有.
在这件事情深入的讨论可以在苹果开发者邮件列表上找到.
它的要点是:
+initialize
在对子类调用之前,运行时实际上会调用超类.
如果确实包含了防护,那么具有自己+initialize
方法的类的子类将不会触发相关的KVO通知.
有关第2点的示例,请务必阅读上述主题中的这篇文章.