Ответ
Метод loadView вызывается системой один раз за время жизни контроллера при первом обращении к его свойству view. Однако он может быть вызван повторно, если система освободит вью из-за нехватки памяти.
Почему именно так?
Система iOS управляет памятью и может выгрузить view контроллера, который не отображается на экране (например, находящийся в фоне). При возврате к такому контроллеру система пересоздаст его view, снова вызвав loadView.
Пример реализации:
class CustomViewController: UIViewController {
override func loadView() {
// Создаём кастомное view вместо стандартного
let customView = UIView(frame: UIScreen.main.bounds)
customView.backgroundColor = .systemBackground
self.view = customView
print("loadView вызван")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// При нехватке памяти система может nil'ить view и позже пересоздать её
}
}
Ключевой момент: Не выполняйте в loadView работу, которая должна быть однократной (например, добавление сабвью-контроллеров). Для этого используйте viewDidLoad.