当前位置:  开发笔记 > IOS > 正文

+初始化/ +加载总是以:if(self == [MyClass class])后卫开始吗?

如何解决《+初始化/+加载总是以:if(self==[MyClassclass])后卫开始吗?》经验,为你挑选了1个好方法。

在你的一个Objective-C课程中实现+ initialize或+ load方法时,你应该始终从这种防守开始吗?:

@implementation MyClass

+ (void)initialize {
    if (self == [MyClass class]) {
        ...
    }
}

...
@end

看起来像+ load和+ initialize中的代码通常只想执行一次.所以这有助于避免子类加载/初始化时的重复执行.

我想我只是想从一些ObjC巫师那里得到一些强化,这是必要/常见的做法......

这是什么常见的智慧?你会建议总是这样做吗?

对于+ load和+ initialize,你的建议是否相同,或者它们应该如何处理?

谢谢.



1> e.James..:

快速回答是:没有.

在这件事情深入的讨论可以在苹果开发者邮件列表上找到.

它的要点是:

    +initialize在对子类调用之前,运行时实际上会调用超类.

    如果确实包含了防护,那么具有自己+initialize方法的类的子类将不会触发相关的KVO通知.

有关第2点的示例,请务必阅读上述主题中的这篇文章.


包含了防护,那么具有自己
在`+ initialize`中完成的绝大多数事情应该只进行一次,并且只针对实现它的类,而不是子类.旧的KVO依赖键机制是一个值得注意的重要例外,它应该在这样的保护之外完成,但是在大多数其他情况下应该使用保护.引用的电子邮件主题主要是关于`+ initialize`是否应该调用`super`,它不应该.
推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有