Какой метод жизненного цикла UIViewController вызывается первым: viewDidLoad или viewWillAppear?

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

Ответ

Первым всегда вызывается viewDidLoad().

Последовательность и назначение:

  1. viewDidLoad()

    • Вызывается один раз после загрузки view-иерархии в память.
    • View еще не добавлена в окно и не видна пользователю.
    • Идеальное место для первоначальной настройки элементов UI, загрузки статических данных, настройки constraints.
  2. viewWillAppear(_:)

    • Вызывается перед каждым появлением view на экране (при первом открытии, возврате с другого экрана, снятии модального окна).
    • View уже находится в иерархии окон, но еще не отрисована.
    • Идеальное место для обновления данных (например, запроса к сети), запуска анимаций, скрытия/показа элементов в зависимости от контекста.

Пример для наглядности:

class ExampleViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        print("1. viewDidLoad: Настраиваю интерфейс.")
        setupUI() // Выполнится один раз
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        print("2. viewWillAppear: Обновляю данные для показа.") // Выполнится многократно
        refreshData()
    }
}

Вывод: viewDidLoad — для разовой настройки, viewWillAppear — для подготовки к каждому показу.