Что такое `UIWindow` в iOS?

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

Ответ

UIWindow — это корневой контейнер, наследник UIView, который управляет отображением иерархии представлений (UIView) на экране и диспетчеризацией событий.

Основные обязанности:

  1. Корневой контейнер для View Hierarchy: Содержит все видимые UIView вашего приложения.
  2. Связь с UIViewController: Через свойство rootViewController назначает контроллер, чье view становится корневым для окна.
  3. Диспетчер событий: Получает системные события (касания, движения устройства) и направляет их в соответствующее view (hit-testing).
  4. Управление уровнями окон (windowLevel): Позволяет отображать несколько окон (например, поверх системного статус-бара).

Базовый пример создания (AppDelegate):

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // 1. Создаем окно на весь экран
    window = UIWindow(frame: UIScreen.main.bounds)
    // 2. Назначаем корневой ViewController
    window?.rootViewController = MainTabBarController()
    // 3. Делаем окно видимым и ключевым
    window?.makeKeyAndVisible()
    return true
}

Важные нюансы:

  • keyWindow: Главное окно, получающее ввод с клавиатуры и не связанные с touches события. Определяется makeKeyAndVisible().
  • iOS 13+ и UIScene: В приложениях с поддержкой сцен каждое окно (UIWindow) принадлежит конкретной сцене (UIScene). Управление жизненным циклом окна переносится в UISceneDelegate.
  • Не для UI: Обычно вы не работаете с UIWindow напрямую для построения интерфейса. Его основная роль — быть контейнером для rootViewController.view.