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