Переопределение метода инициализации в подклассе и вызов [super initWith:bla], правильный способ?

Я создаю подкласс класса. Я переопределяю метод инициализации. Этот: -(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;
}

person cocos2dbeginner    schedule 26.08.2011    source источник


Ответы (2)


Обычно так:

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

    }
    return self;
}

Супер обязан вызывать селектор инициализации vanilla, если это необходимо.

person amattn    schedule 26.08.2011

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

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

person Rob Napier    schedule 26.08.2011