Workaround the NavigationController not releasing popped screens and clean up the roomScreen + timelineController + timelineProvider + roomProxy on stop()

This commit is contained in:
Stefan Ceriu
2022-11-28 17:32:25 +02:00
committed by Stefan Ceriu
parent 8c86bf9acb
commit 623eecec77
3 changed files with 20 additions and 8 deletions
@@ -25,10 +25,16 @@ struct RoomScreenCoordinatorParameters {
} }
final class RoomScreenCoordinator: CoordinatorProtocol { final class RoomScreenCoordinator: CoordinatorProtocol {
private let parameters: RoomScreenCoordinatorParameters private var parameters: RoomScreenCoordinatorParameters?
private var viewModel: RoomScreenViewModelProtocol private var viewModel: RoomScreenViewModelProtocol?
private var navigationController: NavigationController { parameters.navigationController } private var navigationController: NavigationController {
guard let parameters else {
fatalError()
}
return parameters.navigationController
}
init(parameters: RoomScreenCoordinatorParameters) { init(parameters: RoomScreenCoordinatorParameters) {
self.parameters = parameters self.parameters = parameters
@@ -43,7 +49,7 @@ final class RoomScreenCoordinator: CoordinatorProtocol {
// MARK: - Public // MARK: - Public
func start() { func start() {
viewModel.callback = { [weak self] result in viewModel?.callback = { [weak self] result in
guard let self else { return } guard let self else { return }
MXLog.debug("RoomScreenViewModel did complete with result: \(result).") MXLog.debug("RoomScreenViewModel did complete with result: \(result).")
switch result { switch result {
@@ -56,11 +62,17 @@ final class RoomScreenCoordinator: CoordinatorProtocol {
} }
func stop() { func stop() {
viewModel.stop() viewModel?.stop()
viewModel = nil
parameters = nil
} }
func toPresentable() -> AnyView { func toPresentable() -> AnyView {
AnyView(RoomScreen(context: viewModel.context)) guard let context = viewModel?.context else {
fatalError()
}
return AnyView(RoomScreen(context: context))
} }
// MARK: - Private // MARK: - Private
@@ -57,7 +57,7 @@ class RoomSummaryProvider: RoomSummaryProviderProtocol {
slidingSyncViewProxy.diffPublisher slidingSyncViewProxy.diffPublisher
.collect(.byTime(serialDispatchQueue, 0.25)) .collect(.byTime(serialDispatchQueue, 0.25))
.sink { self.updateRoomsWithDiffs($0) } .sink { [weak self] in self?.updateRoomsWithDiffs($0) }
.store(in: &cancellables) .store(in: &cancellables)
} }
@@ -61,7 +61,7 @@ class RoomTimelineProvider: RoomTimelineProviderProtocol {
roomTimelineListener roomTimelineListener
.itemsUpdatePublisher .itemsUpdatePublisher
.collect(.byTime(serialDispatchQueue, 0.25)) .collect(.byTime(serialDispatchQueue, 0.25))
.sink { self.updateItemsWithDiffs($0) } .sink { [weak self] in self?.updateItemsWithDiffs($0) }
.store(in: &cancellables) .store(in: &cancellables)
} }
} }