Какие методы жизненного цикла UIViewController вызываются при переходе назад на предыдущий экран?

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

Ответ

При переходе назад (pop) в UINavigationController вызываются методы жизненного цикла исчезающего (текущего) контроллера.

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

  1. viewWillDisappear(_:) — вызывается перед тем, как представление контроллера будет скрыто с экрана. Здесь можно приостановить анимации или обновление UI.
  2. viewDidDisappear(_:) — вызывается после того, как представление было полностью скрыто. Подходящее место для отписки от событий или освобождения ресурсов, не нужных в фоне.

Пример:

class CurrentViewController: UIViewController {
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        // Приостанавливаем видео или анимацию
        player.pause()
    }

    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        // Освобождаем тяжелые ресурсы
        cache.removeAllObjects()
        print("Экран исчез")
    }
}

Контроллер, на который происходит возврат, получит вызовы viewWillAppear(_:) и viewDidAppear(_:).