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

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

Ответ

Приложение iOS проходит через пять основных состояний, определенных в UIApplication.State:

  1. notRunning: Приложение не запущено или было завершено системой/пользователем.
  2. inactive: Приложение работает на переднем плане, но не обрабатывает события (например, во время отображения системного алерта или перехода между состояниями).
  3. active: Приложение работает на переднем плане и активно обрабатывает события. Это нормальный режим работы.
  4. background: Приложение находится в фоне, но может выполнять код (завершать задачи, играть аудио, получать обновления локации).
  5. suspended: Приложение находится в фоне, но его код не выполняется. Система может автоматически завершить приложение в этом состоянии для освобождения ресурсов.

Переходы между состояниями обрабатываются в AppDelegate или SceneDelegate:

// Запуск: notRunning -> inactive -> active
func application(_ application: UIApplication,
                 didFinishLaunchingWithOptions...) -> Bool { ... }

// Прерывание (входящий звонок): active -> inactive
func applicationWillResignActive(_ application: UIApplication) { ... }

// Уход в фон: inactive -> background
func applicationDidEnterBackground(_ application: UIApplication) { ... }

// Возврат на передний план: background -> inactive -> active
func applicationWillEnterForeground(_ application: UIApplication) { ... }
func applicationDidBecomeActive(_ application: UIApplication) { ... }

// Завершение: background -> suspended -> notRunning
func applicationWillTerminate(_ application: UIApplication) { ... }

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