Требуется ли init() в Задаче C

Я новичок в Objective C. У меня проблемы с пониманием метода init(). Я прочитал эти две строки на сайте Apple:

  1. Метод init(), определенный в классе NSObject, не инициализируется; это просто возвращает себя. ( https://developer.apple.com/reference/objectivec/nsobject/1418641-init)

  2. Вы должны использовать метод 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 для своего пользовательского объекта, если только инициализация по умолчанию для установки нуля не является достаточной.

Другие вопросы по тегам