Ответ
Последовательность событий от тапа до отображения интерфейса:
- Запуск процесса: Система создает процесс приложения и загружает его основной исполняемый файл (Mach-O) и связанные динамические библиотеки (dylibs).
- Точка входа: Вызывается функция
UIApplicationMain(или@mainв Swift). Она:- Создает singleton-объект класса
UIApplication(или вашего подкласса). - Создает экземпляр
AppDelegateи назначает его делегатом приложения.
- Создает singleton-объект класса
- Настройка приложения: Вызывается
application(_:didFinishLaunchingWithOptions:)вAppDelegate. Это основная точка для начальной настройки. - Создание UI:
- Со Storyboard: Система загружает указанный в
Info.plist(UIMainStoryboardFile) storyboard, создает Initial View Controller и назначает егоrootViewControllerдля главного окна (UIWindow). - Без Storyboard (программно): Вы должны создать
UIWindowи установитьrootViewControllerвручную.
- Со Storyboard: Система загружает указанный в
- Отображение: Окно становится
keyWindowиvisible. Запускается Main Run Loop, который начинает обрабатывать события (касания, таймеры и т.д.).
Минимальный пример AppDelegate без Storyboard:
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// 1. Создаем окно
window = UIWindow(frame: UIScreen.main.bounds)
// 2. Создаем и назначаем корневой контроллер
window?.rootViewController = MyRootViewController()
// 3. Делаем окно видимым и ключевым
window?.makeKeyAndVisible()
return true
}