Жизненный цикл UIViewController
Вопрос
Расскажите жизненный цикл UIViewController и что вы делаете в каждом методе.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
`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 ошибок.
Предыдущий вопрос
Плавный скролл длинного списка в UIKit
Следующий вопрос
translatesAutoresizingMaskIntoConstraints
Ещё по теме «UIKit»
- Неверная картинка в переиспользуемой ячейке
- Diffable data source и повторяющиеся идентификаторы
- Что делать в prepareForReuse
- reconfigureItems и reloadItems
- Ячейки с автоматической высотой
- Разница между frame и bounds
- Где брать финальный размер view
- Почему кнопка не получает нажатия