Ответ
UIApplicationDelegate определяет методы, реагирующие на изменения состояния приложения. Основные из них:
-
application(_:didFinishLaunchingWithOptions:) -> BoolНазначение: Точка входа после загрузки приложения. Вызывается один раз за сессию. Использование: Инициализация сторонних SDK (Firebase, аналитика), настройка корневого контроллера окна, начальная конфигурация.func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { FirebaseApp.configure() window?.rootViewController = MainViewController() return true } -
applicationDidBecomeActive(_:)Назначение: Приложение перешло на передний план и активно для пользовательского ввода. Вызывается также послеdidFinishLaunching. Использование: Возобновление анимаций, обновление данных, сброс badged-иконки. -
applicationWillResignActive(_:)Назначение: Приложение собирается перейти в фоновый режим (например, при входящем звонке или открытии Control Center). Использование: Приостановка критичных задач, пауза в играх. -
applicationDidEnterBackground(_:)Назначение: Приложение теперь находится в фоновом режиме. У вас есть примерно ~30 секунд для сохранения состояния и освобождения ресурсов. Использование: Сохранение пользовательских данных, освобождение общей памяти, запрос на дополнительное время выполнения при необходимости. -
applicationWillEnterForeground(_:)Назначение: Приложение будет выведено на передний план из фонового режима. Использование: Отмена изменений, сделанных при переходе в фон (например, скрытие конфиденциальных данных). -
applicationWillTerminate(_:)Назначение: Приложение будет завершено системой. Вызывается, только если приложение было в фоне. Использование: Финальное сохранение данных. Не стоит полагаться на этот метод для критичных операций — используйтеapplicationDidEnterBackground.
Ответ 18+ 🔞
Давай разберём этот зоопарк методов, которые твоё приложение вызывает, когда у него начинается жизнь, кризис или оно просто хочет поспать. UIApplicationDelegate — это типа такой главный диспетчер, который орет тебе в ухо: «Эй, чувак, смотри что происходит!».
Вот основные крики, которые ты услышишь:
-
application(_:didFinishLaunchingWithOptions:) -> BoolЧто это: Самый первый пинок под зад после того, как система загрузила твой код. Вызывается ОДИН РАЗ за всю сессию, пока юзер не вырубит приложение. Зачем: Чтобы ты успел всё настроить, пока пользователь пялится на launch screen. Запускаешь Firebase, ставишь главный экран, инициализируешь всякую хрень.func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { FirebaseApp.configure() // Инициализируем аналитику, чтобы знать, как часто юзеры плачут window?.rootViewController = MainViewController() // Ставим главную вьюху return true // Говорим системе: «Всё ок, поехали, блядь!» } -
applicationDidBecomeActive(_:)Что это: Приложение вылезло на передний план и готово к работе. Юзер тыкает в него пальцем. Вызывается ещё и сразу после того самого первогоdidFinishLaunching. Зачем: Оживить всё, что замерло. Запустить анимации, обновить ленту, сбросить красные циферки (badges) на иконке. -
applicationWillResignActive(_:)Что это: Приложение вот-вот схлопнется в фон. Например, юзеру позвонили, или он вытащил шторку уведомлений. Ещё не в фоне, но уже и не в активной фазе. Зачем: Поставить на паузу всё, что не должно работать, когда приложение не на экране. Игры, видео, активные таймеры. -
applicationDidEnterBackground(_:)Что это: Всё, приложение ушло в фон. Оно свернуто. У тебя есть, блядь, примерно ~30 секунд, чтобы привести дела в порядок, иначе система прибьёт процесс как надоедливую муху. Зачем: Срочно сохранить все данные пользователя, освободить общую память, и если надо — попросить у системы дополнительное время на какую-нибудь долгую операцию (типа загрузки файла). -
applicationWillEnterForeground(_:)Что это: Приложение проснулось и вот-вот выпрыгнет на экран из этого фонового сна. Зачем: Отменить всякие параноидальные действия, которые ты сделал, когда уходил в фон. Например, если ты скрыл контент или включил блюр, чтобы никто не подсмотрел — сейчас самое время всё вернуть. -
applicationWillTerminate(_:)Что это: Финальный крик перед смертью. Система убивает твоё приложение. Важное уточнение: этот крик ты услышишь ТОЛЬКО если приложение уже было в фоне. Если юзер вырубает его прямо с активного экрана — этот метод не вызовется! Зачем: Последний шанс что-то сохранить. Но, ёпта, не надейся на него. Всё критичное нужно делать вapplicationDidEnterBackground, потому что сюда можно и не попасть.