允许UINavigationController推送可能导致重复堆栈的视图控制器是不好的做法吗?

时间:2012-01-19 03:28:39

标签: iphone uiviewcontroller uinavigationcontroller

我正在使用UINavigationController构建一个应用程序,我在其中推送一个UIViewControllers,其中一个类的IBActions可能会导致第一个类型的另一个实例被推送:

ViewControllerType1 - > ViewControllerType2 - > ViewControllerType3 - > ViewControllerType1

正如您所看到的,它可能没有“结束”堆栈。

这种不良做法是否会像这样一个永无止境的循环? UINavigationController堆栈是否应该与'end'一起使用?

2 个答案:

答案 0 :(得分:3)

如果这是用户期望的那样,允许“循环”是很好的。

如果您希望(并且希望允许)用户创建深层堆栈,您应该尝试最小化每个视图控制器中的私有状态量。例如,如果堆栈上的两个视图控制器都向用户显示相同的信息,则应使两个视图控制器共享包含该信息的相同底层对象。

如果收到didReceiveMemoryWarning message(如果该视图控制器不在堆栈顶部),您还应确保每个视图控制器尽可能多地发布。

答案 1 :(得分:0)

我认为这不是最好的做法 - 它会使导航变得相当麻烦,除非你实现弹出到root或至少低级到层次结构的函数。

另外,根据我的经验,你不应该完全相信这些安排好的控制器的保留计数是正确计算的 - 我尝试了一次类似的方法并弹出一个视图控制器导致它被释放,同时仍然在技术上叠加。

另外 - 资源方面它太可怕了 - 你不知道你最终会有多少个视图控制器。