Какие ключевые методы жизненного цикла приложения определены в AppDelegate?

Ответ

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, потому что сюда можно и не попасть.