Что такое жизненный цикл iOS-приложения и какие у него состояния?

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

Ответ

Жизненный цикл (App Lifecycle) — это последовательность состояний, через которые проходит приложение от запуска до завершения. Управление им необходимо для правильного распределения ресурсов и реакции на действия пользователя/системы.

Основные состояния:

  1. Not Running: Приложение не запущено.
  2. Inactive (Неактивное): Приложение на переднем плане (foreground), но не обрабатывает события (например, во время входящего звонка или показа системного алерта). Кратковременное состояние.
  3. Active (Активное): Приложение на переднем плане и получает события. Нормальный режим работы.
  4. Background (Фоновое): Приложение находится на заднем плане, но может выполнять код (например, завершить загрузку, обновить геопозицию). Время выполнения ограничено.
  5. Suspended (Приостановленное): Приложение находится в фоне, но код не выполняется. Состояние процесса и память сохраняются. Система может автоматически завершить приложение в этом состоянии для освобождения ресурсов.

Управление через AppDelegate (без сцен, до iOS 13):

// Запуск приложения
func application(_:didFinishLaunchingWithOptions:) -> Bool

// Переходы между состояниями
func applicationWillResignActive(_:) // Active -> Inactive
func applicationDidBecomeActive(_:)  // Inactive -> Active
func applicationDidEnterBackground(_:) // Inactive -> Background
func applicationWillEnterForeground(_:) // Background -> Inactive
func applicationWillTerminate(_:) // Завершение (может не вызваться, если killed из Suspended)

Управление через SceneDelegate (с поддержкой многозадачности, iOS 13+):

Аналогичные методы существуют в SceneDelegate для управления жизненным циклом отдельной сцены (окна) приложения: sceneWillResignActive, sceneDidEnterBackground и т.д.

Практическое значение: В этих методах вы должны освобождать ресурсы (камеру, аудио), приостанавливать анимацию, сохранять данные пользователя и скрывать конфиденциальную информацию (например, при переходе в background).