ENIGMA AI
ENIGMA AI
iOS Средний

Какой жизненный цикл у UIViewController?

Жизненный цикл UIViewController

Порядок вызова методов:

1. init(coder:) / init(nibName:bundle:)
2. loadView()
3. viewDidLoad()
4. viewWillAppear(_:)
5. viewWillLayoutSubviews()
6. viewDidLayoutSubviews()
7. viewDidAppear(_:)

--- Контроллер видим ---

8. viewWillDisappear(_:)
9. viewDidDisappear(_:)

--- Контроллер скрыт ---

10. deinit

Детали каждого метода:

loadView()

override func loadView() {
    // Создание view программно (без storyboard)
    view = CustomView()
}

viewDidLoad()

override func viewDidLoad() {
    super.viewDidLoad()
    // Вызывается ОДИН раз
    // Настройка UI, подписки, загрузка данных
    setupUI()
    loadData()
}

viewWillAppear(_:)

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    // Перед показом (может вызываться многократно)
    // Обновление данных, подписки на notifications
    refreshData()
}

viewDidLayoutSubviews()

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    // После layout (bounds уже известны)
    // Финальная настройка размеров
    gradientLayer.frame = view.bounds
}

viewDidAppear(_:)

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    // Контроллер полностью видим
    // Анимации, аналитика
    startAnimations()
}

viewWillDisappear(_:)

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    // Перед скрытием
    // Сохранение состояния, отписки
    saveState()
}

Что изменилось в iOS 13+:

  • viewIsAppearing(_:) — новый метод между willAppear и didAppear
  • Trait collections обновлены до вызова
  • Рекомендуется для финальной настройки размеров

Распространённые ошибки:

// ПЛОХО: в viewDidLoad размеры могут быть неточными
override func viewDidLoad() {
    layer.frame = view.bounds  // Может быть 0 или неверно
}

// ХОРОШО: в viewDidLayoutSubviews
override func viewDidLayoutSubviews() {
    layer.frame = view.bounds  // Правильные размеры
}

Похожие вопросы

Готовитесь к собеседованию?

ENIGMA AI — невидимый ИИ-помощник для технических интервью

Попробовать бесплатно
Все вопросы