popToRoot не закрывает модально представленный профиль. Кроме того, subscriptions в долгоживущем bag могут накапливаться при повторных открытиях.
Возможные дефекты в реализации координатора приложения №2
popToRoot не закрывает модально представленный профиль. Кроме того, subscriptions в долгоживущем bag могут накапливаться при повторных открытиях.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Рассмотрите пример координатора, который отвечает за показ экрана профиля и использует RxSwift для обработки события выхода пользователя. Обратите внимание на потенциальные проблемы, связанные с управлением навигацией и возможными утечками памяти.
final class AppCoordinator {
let navController: UINavigationController
let bag = DisposeBag()
func presentProfile() {
let profileVC = ProfileController()
profileVC.rx.didTapLogout
.bind(onNext: { [weak navController] in
navController?.popToRootViewController(animated: true)
})
.disposed(by: bag)
navController.present(profileVC, animated: true)
}
}
Ответ
popToRoot не закрывает модально представленный профиль. Кроме того, subscriptions в долгоживущем bag могут накапливаться при повторных открытиях.
Для modal нужен dismiss и согласованный переход к неавторизованному flow после реального logout. Подписку желательно привязать к сроку жизни данного профиля/дочернего coordinator, а не хранить бесконечно в общем bag. Слабый захват navController предотвращает его удержание этим closure, но не доказывает отсутствие всех утечек: реализация didTapLogout не показана. Класс также требует init, устанавливающий обязательный navController. Проверять нужно как корректность навигации, так и освобождение экранов после закрытия.