我的情况是用户通过一系列“级别”进展。每个级别都有自己的UIViewController。现在,我只是提出下一个级别:
// in level 1 view controller, for example, here's how we go to level 2
[self presentModalViewController:level2VC animated:YES];
这很简单,但很明显它会产生一大堆UIViewControllers。理想情况下,我想做一个很好的视觉过渡(比如交叉溶解)到下一个级别的UIViewController,然后释放最后一个来节省内存,但我认为这会导致不稳定,因为我用这种方法释放父视图控制器。
那么最好的方法是什么?
谢谢!
答案 0 :(得分:3)
这是为UINavigationController构建的! Class Reference
答案 1 :(得分:1)
UINavigationController
是您所描述的UI类型的常用习惯用法。
您可以通过执行:pushViewController:animated:
来推送新的视图控制器,这也提供了您正在寻找的过渡效果。
无论如何,请记住,这意味着“导航”:即来回移动。因此,除非您通过隐藏“后退”按钮[self.navigationItem setHidesBackButton:YES animated:YES]
来自定义导航栏,否则它不仅仅是向前发展。
此外,所有UIViewController
a都保存在内存中(总是),只有在内存条件较低的情况下(-[didReceiveMemoryWarning][1]
),“受控”视图才会自动释放,从而恢复内存。如果发生这种情况,您需要确保在用户导航回来时能够再次加载视图。
如果你真的关心内存(尽管我认为这不应该是一个问题),你甚至可以在推送下一个控制器之前考虑“弹出”(即移除)当前控制器。这将持续一个非常“平坦”的控制器层次结构。