Выбор ответа Middle Навигация, координаторы и deep links обновлено
Утечка дочерних координаторов
Вопрос
Дочерний координатор оформления заказа добавлен в childCoordinators родителя. Пользователь закрыл поток свайпом назад. Что часто идёт не так?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Родитель не узнаёт о закрытии и не удаляет дочерний координатор: он и его объекты висят в памяти. Координатор хранит родитель, а контроллеры хранит навигационный стек.
Варианты ответа
- Свайп назад запрещён при использовании координаторов, и пользователь не может закрыть поток жестом
- Дочерний координатор освобождается автоматически вместе с контроллером, поэтому проблем нет
- Родитель не узнаёт о закрытии и не удаляет дочерний координатор: он и его объекты висят в памятиправильный ответ
- Навигационный контроллер падает с исключением, потому что координатор продолжает ссылаться на снятый экран
Разбор
Координатор хранит родитель, а контроллеры хранит навигационный стек. Если пользователь ушёл системным жестом или кнопкой «назад», код координатора не вызывается. Нужно отслеживать это: UINavigationControllerDelegate.didShow с проверкой, что контроллер потока больше не в стеке, или presentationControllerDidDismiss для модальных экранов, и тогда удалять дочерний координатор.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.