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

«Какие ключевые методы жизненного цикла приложения определены в AppDelegate?» — вопрос из категории UIKit, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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.