У меня есть вопрос о написании ваших собственных методов инициализации в target-c. Я прочитал несколько разных книг и видел несколько способов сделать это, но консенсус - правильный способ сделать это так:
- (id)init
{
self = [super init];
if(self!=nil)
{
}
return self;
}
Я немного запутался по поводу строки "self = [super init]". Насколько я понимаю, нет никакой гарантии, что [super init] вернет класс, который вы ожидаете. Я думаю, что это называется "кластеры классов". Но в обычном случае, когда он возвращает класс, который вы ожидаете, если я задаю для self указание на класс, который мне возвращается, разве я не говорю, что self скорее ссылается на объект другого класса? чем класс, который я в методе init?
Подводя итог, зачем устанавливать для себя суперкласс по сравнению с реальным классом, в котором я учусь?
Из блога, который я прочитал:
Причина в учебнике в том, что [супер
init] разрешено делать одно из трех
вещи:
1) Верните свой приемник (само
указатель не меняется) с унаследованным
значения экземпляра инициализированы. 2) Вернуть
другой объект с унаследованным
значения экземпляра инициализированы. 3) Возврат
ноль, что указывает на неудачу. Во-первых
В этом случае назначение не влияет на
самостоятельно ...
«Задание не влияет на себя» - вот что меня смущает. Почему это не имеет никакого эффекта? Если я установлю что-то = на что-то другое, разве это не должно иметь эффекта?