Какой жизненный цикл у UIViewController и в каком порядке вызываются методы
iOSUIViewControllerжизненный циклметодыразработка приложений
Что проверяют
Знаете ли вы порядок и понимаете ли, почему геометрию нельзя настраивать в viewDidLoad.
Как отвечать
Порядок такой:
loadView: создаётview. Переопределяют только при создании иерархии кодом без storyboard;viewDidLoad: вызывается один раз после загрузки. Здесь разовая настройка, подписки на данные, конфигурация подпредставлений. Размеры на этом этапе ещё не окончательные;viewWillAppear: перед каждым появлением. Обновление данных, скрытие панели навигации, подписка на уведомления;viewWillLayoutSubviewsиviewDidLayoutSubviews: вокруг раскладки. Вызываются много раз, здесь работают с реальными размерами, например с радиусом скругления по половине высоты;viewDidAppear: экран показан, анимация закончилась. Аналитика, запуск анимаций, что-то тяжёлое;viewWillDisappearиviewDidDisappear: уход с экрана. Отписка, сохранение, остановка таймеров.
Ключевое: viewDidLoad один раз, viewWillAppear каждый раз. Возврат по стеку навигации не вызывает viewDidLoad повторно, и обновление данных, положенное туда, просто не произойдёт.
Где спотыкаются
Считают размеры в viewDidLoad и получают неверную геометрию.
Обновляют данные в viewDidLoad и не понимают, почему при возврате назад экран устарел.
Подписываются в viewWillAppear и не отписываются в viewWillDisappear, из-за чего обработчик срабатывает несколько раз.
Делают тяжёлую работу в viewWillAppear и получают заметную задержку перехода.