Жизненный цикл UIViewController включает методы, вызываемые в определенные моменты его существования: от создания до уничтожения.
Основные методы жизненного цикла:
-
viewDidLoad():
- Вызывается после того, как представление контроллера загружено в память, но до его отображения на экране.
- Используется для инициализации данных, настройки UI-элементов, которые не зависят от геометрии представления.
- Вызывается только один раз за время жизни контроллера.
-
viewWillAppear(_ animated: Bool):
- Вызывается непосредственно перед тем, как представление контроллера появится на экране.
- Используется для выполнения задач, которые должны происходить каждый раз, когда представление становится видимым (например, обновление данных, анимации).
- Может вызываться несколько раз.
-
viewDidAppear(_ animated: Bool):
- Вызывается после того, как представление контроллера полностью появилось на экране и стало видимым для пользователя.
- Подходит для запуска анимаций или других задач, требующих, чтобы представление было полностью готово.
- Может вызываться несколько раз.
-
viewWillDisappear(_ animated: Bool):
- Вызывается непосредственно перед тем, как представление контроллера будет удалено с экрана (например, при переходе на другой экран).
- Используется для сохранения состояния или остановки задач, которые не должны выполняться, пока представление невидимо (например, остановка таймеров).
- Может вызываться несколько раз.
-
viewDidDisappear(_ animated: Bool):
- Вызывается после того, как представление контроллера полностью удалено с экрана.
- Используется для очистки ресурсов или остановки задач, которые не нужны, когда представление невидимо.
- Может вызываться несколько раз.
-
viewWillLayoutSubviews():
- Вызывается перед тем, как контроллер начнет располагать свои подвиды (subviews).
- Используется для внесения изменений в констрейнты или фреймы перед выполнением авторазметки.
- Может вызываться несколько раз.
-
viewDidLayoutSubviews():
- Вызывается после того, как контроллер закончил располагать свои подвиды.
- Используется для выполнения задач, зависящих от окончательных размеров подвидов (например, настройка скролл-индикаторов или теней).
- Может вызываться несколько раз.
-
didReceiveMemoryWarning():
- Вызывается при низком уровне оперативной памяти.
- Используется для освобождения ресурсов, которые могут быть воссозданы позже.
-
deinit:
- Вызывается непосредственно перед тем, как объект
UIViewController будет уничтожен и освобожден из памяти.
- Используется для выполнения финальной очистки, например, удаления наблюдателей (observers) или закрытия сетевых соединений.
Порядок вызова:
Типичный порядок вызова методов при появлении контроллера:
viewDidLoad()
viewWillAppear(_ animated: Bool)
viewWillLayoutSubviews()
viewDidLayoutSubviews()
viewDidAppear(_ animated: Bool)
Типичный порядок вызова методов при исчезновении контроллера:
viewWillDisappear(_ animated: Bool)
viewDidDisappear(_ animated: Bool)
deinit (если контроллер более не нужен)
Пример реализации:
swift