覆盖子类中的init方法并调用[super initWith:bla],正确的方法?

时间:2011-08-26 15:53:41

标签: iphone objective-c override superclass macos

我正在为一个类创建子类。 我正在覆盖init方法。这一个: - (id)initWithSomething :( Something *)somet;

这看起来像这样(在子类中)

-(id)initWithSomething:(Something *)somet with:(int)i{

    if (self = [super init]) {
     //do something   
    }

    return self;
}

但是现在我想在超类中调用init。

我现在怎么做?梅比这样?

-(id)initWithSomething:(Something *)somet with:(int)i{

    if (self = [super init]) {

    }

    [super initWithSomething:somet];

    return self;
}

2 个答案:

答案 0 :(得分:2)

通常是这样的:

-(id)initWithTarget:(CCNode *)someTarget
{
    self = [super initWithTarget:someTarget];
    if (self)
    {

    }
    return self;
}

如果需要,调用vanilla init选择器是super的责任。

答案 1 :(得分:2)

-(id)initWithSomething:(Something *)somet {
    if ((self = [super initWithSomething:somet])) {
      // ...
    }    
    return self;
}

一对一方法应该是您的“指定初始化程序”。所有其他初始值设定项应调用该值,指定的初始值设定项应调用super指定的初始值设定项。 (这是一般规则;有一些例外情况,例如initWithCoder:,但这是正常方法。)