是否会被所有子类调用初始化?

时间:2013-09-27 09:47:31

标签: objective-c initialization

我们知道一个方法初始化,这是在第一次访问对象时调用的。

说我有一个班,A的孩子是B,C,D

Say,B,C,D被访问(A实际上是一个抽象类)。

是否会调用[初始化]?

基本上B,C和D可以拥有自己的初始化方法,但方法类似。所以我想把它放在A中。

我不打算直接调用initialize。我想我只需要调用[super initialize]。如果B根本没有初始化怎么办?是否会调用[初始化]?

4 个答案:

答案 0 :(得分:1)

如果A有方法初始化并且当B没有实现这样的方法时你调用[B initialize],则调用A的方法初始化,因为B是A的子节点。

答案 1 :(得分:1)

如果你想在子类Initialize中做额外的事情,那么你可以这样做:

@implementation A
+(void)initialize
{
   // stuff you want to do for all of your subclasses
}
@end

@interface B : A
@end

@implementation B
+(void)initialize
{
   [super initialize];
   // anything special for B
}
@end

如果您只想要A类初始化的内容,请参阅CodeHelps回答

答案 2 :(得分:0)

不,如果你直接打电话

[B Initiliaze]

(其中“Initialize”方法覆盖A的Initialize),不调用A上的方法。 如果需要调用它,则必须从“B初始化”方法手动调用它。

答案 3 :(得分:0)

保证在[A initialize]之前调用

[B initialize]。如果课程B本身未实现+initialize,那么对[B initialize]的调用将再次执行A的{​​{1}}实施(+initialize })。