Ответ вслух Junior UIKit спрашивают часто обновлено

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

Вопрос

Расскажите жизненный цикл UIViewController и что вы делаете в каждом методе.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Контроллер сначала вызывает loadView: создаёт корневую view, я переопределяю его, если вёрстка в коде и корневая view своя.

Что должно прозвучать в ответе

  • `loadView` создаёт иерархию, переопределяют для кастомной корневой view

  • `viewDidLoad` один раз: настройка UI, подписки, первичная загрузка

  • `viewWillAppear`/`viewDidAppear` при каждом показе: обновить данные, аналитика, анимации

  • `viewWillLayoutSubviews`/`viewDidLayoutSubviews`: ручные расчёты фреймов

  • `viewWillDisappear`/`viewDidDisappear`: остановить таймеры, сохранить состояние

  • `deinit` проверяет, что нет утечек

Что могут спросить следом

  • Что изменилось с появлением viewIsAppearing?
  • В каком методе вы отписываетесь от уведомлений?

Разбор

Контроллер сначала вызывает loadView: создаёт корневую view, я переопределяю его, если вёрстка в коде и корневая view своя. Затем viewDidLoad, один раз за жизнь: настраиваю сабвью, констрейнты, подписки, запускаю первичную загрузку. viewWillAppear вызывается при каждом показе, в том числе при возврате назад: тут обновляю данные, которые могли измениться. viewDidAppear после завершения перехода: аналитика показа, старт анимаций. Раскладка идёт в viewWillLayoutSubviews и viewDidLayoutSubviews, там можно считать фреймы, когда размеры известны. При уходе viewWillDisappear и viewDidDisappear: останавливаю таймеры, видео, сохраняю черновик. И держу лог в deinit в отладке, чтобы видеть, что контроллер освобождается после закрытия.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.