Presenting a child coordinator too quickly sometimes results in the Coordinator getting deallocated. Find the attached sample project as proof.
https://github.com/chefnobody/DeallocSample
In the attached project, you will find NavigationCoordinators that trigger some action after 1.0 second:
RootCoordinator pushes ListCoordinator, which presents ProfileCoordinator, which presents OnboardingCoordinator.
Line ~73 of AppDelegate reads like this:
// Change this line's dispatch time to `.now() + 1.0` to avoid the bug:
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { [weak self] in
self?.trigger(.profile)
}
Run the code as-is should result in a log like this:
*****
ProfileCoordinator deinit
Changing the dispatch delay time on line 73 to 1.0:
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { [weak self] in
self?.trigger(.profile)
}
Does not cause ProfileCoordinator to deallocate and successfully presents the final OnboardingCoordinator
Presenting a child coordinator too quickly sometimes results in the Coordinator getting deallocated. Find the attached sample project as proof.
https://github.com/chefnobody/DeallocSample
In the attached project, you will find
NavigationCoordinators that trigger some action after 1.0 second:RootCoordinatorpushesListCoordinator, which presentsProfileCoordinator, which presentsOnboardingCoordinator.Line ~73 of AppDelegate reads like this:
Run the code as-is should result in a log like this:
Changing the dispatch delay time on line 73 to
1.0:Does not cause ProfileCoordinator to deallocate and successfully presents the final
OnboardingCoordinator