У Objective-C, у чому різниця між initметодом (тобто призначеним ініціалізатором для класу) та initializeметодом? Який код ініціалізації слід ввести в кожну?
Відповіді:
-initє методом екземпляра, що використовується для ініціалізації певного об'єкта. +initializeє методом класу, що виконується до створення будь-яких екземплярів класу та перед запуском інших методів класу. +initializeце не те, що ви використовуєте більшу частину часу, але це зручно для налаштування будь-яких статичних змінних, які може використовувати клас у цілому, або для забезпечення дотримання певних умов перед створенням будь-яких екземплярів.
Код , який належить в -initспособі описаний детально в розділі Реалізація ініціалізатор розділ The Objective-C мову програмування . Також є деяке обговорення ініціалізації класів (тобто +initialize) та того, чому вам може знадобитися це зробити в тому ж документі, у розділі Об’єкти класу . Код, який входить +initialize, як правило, буде міцно пов’язаний зі спеціальною функціональністю класу, який вимагає від вас ініціалізації в першу чергу. Важливо пам’ятати +initialize(і в будь-якому методі класу), що selfметод класу стосується самого класу, а не екземпляра класу.
if (self == [NameOfClass class])внутрішній +initializeметод, чому нам це потрібно перевіряти? Я знаю, що це пов’язано з тим, що +initializeметод двічі викликається у батьківському класі, але для мене це не зрозуміло. Будь-яка допомога оцінена!
+initializeвона викликається лише один раз для класу, одну реалізацію можна викликати кілька разів - один раз для класу, в якому він знаходиться, і один раз для кожного підкласу, який не забезпечує власний +initializeметод.
Щоб провести паралель для розробників Java, init схожий на конструктор, тоді як ініціалізація - як статичний блок класу.
+initializeметоду). Ви можете фактично створити екземпляр класу, не надсилаючи цьому класу повідомлення (за допомогоюIMPметоду of it create-instance (зазвичай,+allocWithZone:але це може відрізнятися)).