I’ve designed and build game based on UINavigationController. I have several ViewControllers like on the picture. You select NewGame from RootVC and you are ready to play. After finishing, you are asking to go to the next board in NextBoardVC. After 10 boards you are going to next level by NextLevelVC. There is 5 Levels. Each level contains 10 boards. The problem is that I’m pushing each ViewController using pushViewController method. After 5 levels I have 52 VCs on the stack and sometimes application crashes.
GameVC contains many png’s, and some sounds so it’s quite heavy. I don’t have any leaks (tested by Instruments)
Sorry, I dont have reputation so I cant upload images by stackoverflow.
This is an image: 
Textual representation of the view hierarchy:
RootVC
--OptionsVC
--HowToPlayVC
--NewGameVC
--GameVC
--NextBoardVC
--NextLevelVC
--GameVC
--NextBoardVC
--NextLevelVC
--GameVC
--NextBoardVC
--NextLevelVC
--GameVC
--... and so on many times
Is there better way to do the navigation, and eliminate crashes?
Why don’t you just pop the controllers back off instead of just pushing more and more controllers on top, especially at those points where you’re returning in your “loop”?