Ответ
Первым всегда вызывается viewDidLoad().
Последовательность и назначение:
-
viewDidLoad()- Вызывается один раз после загрузки view-иерархии в память.
- View еще не добавлена в окно и не видна пользователю.
- Идеальное место для первоначальной настройки элементов UI, загрузки статических данных, настройки constraints.
-
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 — для подготовки к каждому показу.