Что случится при обращении к свойству view внутри метода loadView до его инициализации?

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

Ответ

Произойдёт бесконечная рекурсия и краш приложения. Свойство view является lazy — при первом обращении, если оно nil, система автоматически вызывает метод loadView для его создания.

Неправильный код (вызывает рекурсию):

override func loadView() {
    // Обращение к view ДО его создания → снова вызовет loadView
    let frame = view.frame // РЕКУРСИЯ!
    view = UIView(frame: frame)
}

Правильный подход: Сначала создайте view, затем присвойте его свойству.

override func loadView() {
    // 1. Создаём view вручную
    let customView = UIView()
    customView.backgroundColor = .white
    // 2. Настраиваем
    let label = UILabel()
    customView.addSubview(label)
    // 3. ТОЛЬКО теперь присваиваем свойству
    self.view = customView
    // 4. Теперь обращение к self.view безопасно
    print(self.view.frame)
}

Важно: Метод loadView предназначен для создания иерархии view с нуля. Для её настройки используйте viewDidLoad.