Skip to content

Child Coordinator is deallocated if presented too quickly #208

Open
@chefnobody

Description

@chefnobody

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions