Создается ли view контроллера UIKit сразу при его инициализации?

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

Ответ

Нет, view создается не сразу, а по требованию (лениво). Это называется ленивой загрузкой (lazy loading) и оптимизирует использование памяти.

Механизм:

  1. При инициализации контроллера (init) его свойство view равно nil.
  2. При первом обращении к self.view (например, из кода или при загрузке интерфейса) система автоматически вызывает метод loadView().
  3. Метод loadView() создает и присваивает экземпляр view контроллеру.

Практические следствия:

  • Если view контроллера никогда не требуется, оно и не будет создано.
  • Не следует обращаться к view в init — это вызовет преждевременную загрузку. Настройку интерфейса выполняйте в viewDidLoad().
  • Вы можете переопределить loadView() для создания кастомного view вручную:
override func loadView() {
    // Создаем view программно, не загружая из storyboard/nib
    let customView = UIView()
    customView.backgroundColor = .systemBackground
    self.view = customView
}