2015-05-27 2 views
2

Это обычный шаблон инициализации, чтобы сделать self = [super init]; который должен назначить self pointerВызов init в init, перед self = [super init]

Но могу ли я переслать init так:

- (id)initWithObject:(id)object { 
    return [self initWithObject:object scrollTo:nil]; 
} 

код работает, но не уверен, если это кошерный ... а также, как он может работать без себя = [супер INIT]

двигаться дальше, это нормально?

- (id)initWithObject:(id)object { 
    self = [self initWithObject:object scrollTo:nil]; // NOT super 
    if (self) { 
     //... 
    } 
    return self; 
} 
+0

100% законный. Я делаю это часто, когда у меня много перегруженных конструкторов. – Shai

+6

Да, но вы действительно должны начать использовать 'instancetype', а не' id'. – picciano

ответ

1

Да, это нормально. Я сделал это сам пару раз без проблем, и я нашел пример кода в Apple documentation (прокрутите вниз до «Несколько инициализаторов и назначенный инициализатор»).

+0

, но как можно получить доступ к self-указателю, почему мы делаем, тогда self = [super init] –

+0

'self' уже определен, потому что вы уже сделали вызов' [Class alloc] '. – Glorfindel

+0

поэтому почему соглашение тогда self = [super init ...] –

0

Да, конечно, вы можете! Обратите внимание, что initWithObject: scrollTo должен возвращать действительный самообъект.

1

Это абсолютно законно, только если в обратном операторе вы вызываете назначенный инициализатор или инициализатор, который вызывает его. Убедитесь, что так или иначе назначен назначенный инициализатор.

Смежные вопросы