Переопределение метода init в подклассе и вызов [super initWith: bla], правильно? - PullRequest
1 голос
/ 26 августа 2011

Я подкласс класса. Я переопределяю метод 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 ]

2 голосов
/ 26 августа 2011
-(id)initWithSomething:(Something *)somet {
    if ((self = [super initWithSomething:somet])) {
      // ...
    }    
    return self;
}

Один и только один метод должен быть вашим «назначенным инициализатором» для класса. Все остальные инициализаторы должны вызывать его, а назначенный инициализатор должен вызывать super назначенный инициализатор. (Это общее правило; есть несколько исключений, таких как initWithCoder:, но это нормальный подход.)

2 голосов
/ 26 августа 2011

Как правило, так:

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

    }
    return self;
}

Super отвечает за вызов селектора инициализации vanilla, если это необходимо.

...