0

在导航堆栈中考虑一个具有四个屏幕(A、B、C 和 D)的简单应用程序。导航按字母顺序 A -> B -> C -> D。

在那种情况下,我习惯于在视图控制器中创建一个成员变量来显示另一个。在我的示例中,A 保留对 B 的引用,B 对 C 和 C 对 D 的引用。

这些引用将保留在内存中,直到所有者控制器被释放。我使用这种方法来最小化控制器的创建,并在显示之前显示的屏幕时获得一些优化。

但我不知道每次需要时创建和自动释放每个控制器是否更好,而不保留它。会有更多的创作,但在一段时间内使用的内存会更少。

更好的方法是什么?

4

3 回答 3

1

最好的方法是使用UINavigationController. 此类提供了一组使用视图控制器的方法。有几种最简单的方法可以使用堆栈,例如 push 和 pop 以及一些更复杂的方法。例如,您可以检索堆栈中所有控制器的数组,然后根据需要对它们重新排序/删除控制器/添加控制器/...,然后推送此数组。这种机制应该允许做你想做的每一件事。

在我看来,保存对另一个控制器的引用是不正确的。创建新的控制器它是廉价的操作,不应该花费太多时间。如果您在控制器初始化期间创建/检索数据数据,只需重新设计模型级别(如果要保存数据,您可以简单地不释放它)。

希望能帮助到你。

于 2012-08-06T12:06:24.560 回答
0

更好的方法是不要让视图控制器保留下一个。UINavigationController自动保留添加到堆栈中的每个视图控制器,因此您不必这样做。但是,如果您尝试将已在同一堆栈中的已初始化视图控制器推送到堆栈,那么您将遇到一些令人惊讶的崩溃/异常。

于 2012-08-06T10:58:05.463 回答
0

UINavigationControllerC当您弹回. 时保留视图的信息B。就在您C再次推动时,检查它是否是nil. 如果它不是零,推旧的。这是一个很好的方法,不会影响您应用程序的任何方面。如果您需要更改 上的值,那将是一种痛苦,C因为B.

于 2012-08-06T12:24:54.893 回答