Ответ
Метод viewDidLoad() вызывается один раз за жизненный цикл контроллера, при первой загрузке его view в память.
Ключевые моменты:
- Вызов происходит, когда система впервые запрашивает свойство
viewконтроллера, и оно равноnil. - После вызова
viewDidLoad()view контроллера создана и загружена, но еще не отображена на экране. - Повторный вызов возможен только если view была выгружена из памяти (например, при сильном недостатке памяти и вызове
didReceiveMemoryWarning, или если контроллер не находится в иерархии навигации), а затем потребовалась снова.
Отличие от других методов жизненного цикла:
class ExampleViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Идеальное место для первоначальной настройки UI.
// Вызывается ОДИН РАЗ.
setupInitialView()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// Вызывается КАЖДЫЙ РАЗ перед появлением view на экране.
// Место для обновления данных, анимаций.
refreshData()
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
// Вызывается после того, как view скрылась с экрана.
}
}
Практический совет: Не помещайте в viewDidLoad код, который должен выполняться при каждом появлении экрана (например, загрузку актуальных данных). Для этого используйте viewWillAppear или viewDidAppear.