Вопрос на собеседовании · iOS-разработчик
Как устроен жизненный цикл SwiftUI View и где хранить состояние?
Короткий ответ, ключевые тезисы и ошибки, которых стоит избежать на интервью.
SwiftUI View — лёгкое value-описание интерфейса, поэтому фреймворк может создавать новые экземпляры при изменении состояния. Сохраняемость определяется не объектом View, а его местом и identity в дереве. Локальное состояние принадлежит @State, объект, которым владеет экран, — @StateObject, а внешний объект передают как @ObservedObject или через environment.
onAppear не следует воспринимать как единственный жизненный цикл контроллера: он может вызываться больше одного раза. Асинхронную работу связывают с идентичностью и отменой, например .task(id:), а важные данные делают идемпотентными и защищают от повторного запуска. Бизнес-логику лучше вынести из View в наблюдаемую модель или use case.
01 · Структура ответа
Что важно сказать интервьюеру
Начните с определения, затем объясните механизм и закончите примером из практики. Для полного ответа раскройте эти тезисы:
02 · Пример
Как объяснить на практике
Экран товара получает productId. ViewModel создаётся как @StateObject, а загрузка запускается через .task(id: productId): при переходе на другой товар прежняя задача отменяется, новая получает другой ключ, а состояние не пересоздаётся из-за обычного обновления body.
Не заучивайте формулировку дословно. Свяжите принцип с задачей из собственного проекта — интервьюер почти наверняка попросит уточнить детали реализации и компромиссы.
03 · Ошибки
Чего избегать в ответе
04 · Углубление
Что могут спросить следом
- Когда использовать @Binding?
- Как NavigationStack влияет на identity?
- Чем @EnvironmentObject отличается от передачи зависимости явно?
Практика ответа
Ответьте вслух, а не про себя
Откроем тренировку сразу на этом вопросе. Выберите грейд, сформулируйте ответ и сравните его с подсказкой.
Mira