Сколько раз вызывается метод `viewDidLoad` у UIViewController?

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

Ответ

Метод 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.