Метод init
используется для инициализации объекта после его выделения.
Если он не определен, то вызывается реализация базового класса, как и с любым другим методом в Objective-C, и если базовый класс не имеет метода init
, то базовый класс «базовый класс» init
будет и т. д. до NSObject
init
, что точно предусмотрено.
Если вы не объявите метод init
, вы не сможете правильно инициализировать ивары в своем классе, если таковые имеются.
О applicationDidFinishLaunching
, это метод для особого класса, который есть у любого приложения Cocoa / iOS, его делегата. Например:
@interface myAppDelegate : NSObject <UIApplicationDelegate> {
...
}
(N.B .: UIApplicationDelegate
может быть также NSApplicationDelegate
)
Как вы видите, этот класс является производным от NSObject, поэтому он будет инициирован платформой путем вызова метода init
, определенного в этом классе (который конкретно зависит от каркаса). Затем, в какой-то момент, платформа вызовет метод applicationDidFinishLaunching
, и у вас есть возможность инициализировать всех участников ваших делегатов и сделать все, что вам нужно для запуска приложения.
В этом случае тот факт, что вы не обязаны выполнять инициализацию в методе init
, а в applicationDidFinishLaunching
, связан с определенной схемой взаимодействия между вашим объектом UIApplication (или NSApplication) и его делегатом. Этот шаблон был определен Apple таким образом;
вы указываете свой класс делегата приложения либо в вашем MainWindow.xib, либо при вызове UIApplicationMain
в main.c
;
фреймворк отвечает за создание экземпляра этого класса (в соответствии с пользовательским способом, с которым программистам не нужно иметь дело) и вызывает applicationDidFinishLaunching
, чтобы вы могли делать с ним все, что вам нужно.
Надеюсь, это объяснение поможет вам понять, что происходит с делегатом приложения и почему вы не объявляете метод init
.