Ответ
UIWindow наследуется от UIView.
Это делает его специализированным контейнером, который управляет всей иерархией представлений (UIView) в приложении. Его ключевые обязанности:
- Координация отрисовки: Управляет процессом рендеринга всех вложенных
UIView. - Доставка событий: Является точкой входа для событий (касания, движения, встряхивания) и направляет их соответствующему представлению.
- Управление корневым контроллером: Содержит свойство
rootViewController, которое определяет начальный контроллер интерфейса.
Пример создания и настройки окна:
// 1. Создание окна с размерами экрана устройства
let window = UIWindow(frame: UIScreen.main.bounds)
// 2. Назначение корневого контроллера представлений
window.rootViewController = MyViewController()
// 3. Делаем окно ключевым и видимым
window.makeKeyAndVisible()
В современных приложениях на основе UIScene окно обычно создается и управляется автоматически фреймворком в SceneDelegate.
Ответ 18+ 🔞
Да ты посмотри, какой хитрый зверь этот UIWindow! Он, сука, оказывается, самый главный папаша-контейнер для всех твоих UIView. Ну, типа, как директор завода, который стоит и смотрит, чтобы все эти вьюхи-рабочие не проебали процесс отрисовки и не разбежались кто куда.
А обязанности у него, блядь, овердохуища:
- Координация отрисовки: Он тут главный по тарелочкам, следит, чтобы все вложенные вьюхи красиво на экран вылезли, а не в говне.
- Доставка событий: Все эти тыки-тапы, встряхивания и прочие пиздюлины сначала прилетают в него, а он уже, хитрая жопа, решает, какую конкретно вьюху этим самым пиздюлем наградить.
- Управление корневым контроллером: У него есть свойство
rootViewController— это типа его правая рука, главный начальник цеха, который говорит, с какого интерфейса всё начинается.
Вот как его, этого директора, обычно назначают на должность:
// 1. Выделяем ему кабинет размером со весь экран
let window = UIWindow(frame: UIScreen.main.bounds)
// 2. Ставим ему в подчинение главного начальника (контроллер)
window.rootViewController = MyViewController()
// 3. Вручаем ключи от кабинета и выгоняем на сцену: "Работай, блядь!"
window.makeKeyAndVisible()
Правда, в этих новых приложениях с UIScene вся эта возня с окном обычно происходит где-то за кулисами, в SceneDelegate, чтобы ты, программист, лишний раз не ебал мозг. Но знать-то, как оно внутри устроено, всё равно надо, а то потом будешь как Герасим — «Му-му» говорить, а нихуя не понимать, почему интерфейс не показывается.