Требуется ли init() в Задаче C
Я новичок в Objective C. У меня проблемы с пониманием метода init(). Я прочитал эти две строки на сайте Apple:
Метод init(), определенный в классе NSObject, не инициализируется; это просто возвращает себя. ( https://developer.apple.com/reference/objectivec/nsobject/1418641-init)
Вы должны использовать метод init... для завершения процесса инициализации. ( https://developer.apple.com/reference/objectivec/nsobject/1571958-alloc)
Нужно ли вызывать init() для инициализации объектов, если "он не инициализируется"? Зачем?
2 ответа
Когда экземпляр объекта создается с +alloc
, он получает полностью настроенную инфраструктуру, и все ivars настроены на 0
, NULL
, nil
, 0.0
(или что-то еще, что является нулевым значением для типа ивара).
Если этого достаточно для класса, нет необходимости перезаписывать -init
и он может просто использовать NSObject
с иници. (-init
из NSObject
просто ничего не делает.) Это сторона разработчика. Это то, на что вы ссылаетесь в 1).
Пользователь класса (тот код, который создал экземпляр), должен отправить init
недавно созданному экземпляру, чтобы дать ему возможность инициализировать себя. Это то, на что вы ссылаетесь в 2).
Как пользователь класса, вы просто не можете знать и не должны знать, требует ли класс некоторый код в процессе инициализации. Так что отправьте сообщение, даже если оно может быть бесполезным.
От разработчика Apple по инициализации объекта:
Если объект не реализует инициализатор, Какао вызывает инициализатор ближайшего предка вместо этого.
Да, вам нужно вызвать некоторую форму init для создания вашего объекта в куче. Init возвращает точку в ячейку памяти. Нет, вам не нужно писать init для своего пользовательского объекта, если только инициализация по умолчанию для установки нуля не является достаточной.