【发布时间】:2014-02-07 15:18:51
【问题描述】:
谁能解释为什么我们需要在+initialize 方法中包含if (self == SomeClass class)?
我发现了类似的问题(如下所列),但没有找到任何具体的说明:
- Objective-C: init vs initialize
- Should +initialize/+load always start with an: if (self == [MyClass class]) guard?
每个人都说,如果你不在 Subclass 中实现/覆盖+initialize,那么它将调用父类两次。
谁能特别解释那部分,特别是为什么它两次调用父类?
最后,为什么我们在继承自NSObject的类中实现+initialize时不会发生这种情况,我们在其中创建了一个自定义的-init方法并调用self = [super init];。
【问题讨论】:
-
init 和 initialize 没有任何关系。
-
@rmaddy 在
-init里面你有self = [super init];,它调用了父母的+initialize,还是我不正确? -
你不正确。在调用任何其他类或实例方法之前,每个类都会调用一次 initialize。
-
@rmaddy 这就是我想知道并要求澄清的原因。它什么时候被调用?如果我不包含 if 语句,它如何被调用两次。
标签: objective-c initialization init