Ответ
Свойство view инициализируется лениво в момент первого обращения к нему (геттеру). Этот процесс называется загрузкой представления.
Жизненный цикл загрузки view:
- Запрос
view: Код (система или разработчик) впервые обращается кself.view. - Вызов
loadView(): Еслиviewравноnil, система вызывает этот метод. - Создание
viewвloadView():- По умолчанию: Метод создает пустой объект
UIView. - Из Storyboard/XIB: Метод загружает иерархию из файла.
- Кастомная реализация: Вы можете переопределить
loadView(), чтобы создать представление вручную.
- По умолчанию: Метод создает пустой объект
- Присвоение: Созданное представление присваивается свойству
view. - Вызов
viewDidLoad(): Сразу после загрузки. Идеальное место для начальной настройки.
Важные нюансы:
- Не вызывайте
super.loadView()при ручном созданииview, иначе вы создадите два представления. - Все outlet'ы гарантированно установлены к моменту вызова
viewDidLoad(). - Используйте
viewIfLoadedдля безопасной проверки, загружено ли представление.
Пример переопределения loadView():
class CustomViewController: UIViewController {
override func loadView() {
// 1. Создаем кастомное view вручную
let customView = CustomView(frame: UIScreen.main.bounds)
customView.backgroundColor = .systemBackground
// 2. НЕ вызываем super.loadView()
// 3. Присваиваем свойству view
self.view = customView
}
override func viewDidLoad() {
super.viewDidLoad()
// Теперь self.view — это наш CustomView
print("View is loaded: (type(of: self.view))") // CustomView
}
}