While investigating a memory leak I discovered a problem related to the technique of calling setRootViewController: inside a transition animation block:
Had a similar issue. In my case I had a viewController hierarchy, and one of the child view controllers had a presented view controller. When I changed then the windows root view controller, for some reason, the presented view controller was still in the memory. So, the solution was to dismiss all view controllers before I change the windows root view controller.