Viewcontroller堆栈理解问题

时间:2016-01-13 00:01:34

标签: ios swift uistoryboardsegue

我在理解viewcontroller堆栈时遇到了一些严重的问题。 我的应用程序何时使用堆栈来保存以前的viewcontrollers?只有当我使用导航视图控制器或任何时候我使用普通的viewcontrollers并在它们之间进行模态化时?

所以我只是想知道我是否使用某种链式例程,例如从vc 1到vc 2以及从vc 2返回到vc 1.没有导航控制器,只是模态segue,没有展开。 我的应用程序是否因为堆栈而出现性能问题(每次我去的时候都会增长)或者它没有任何区别?

----更新

基本上这是我的问题。如果我完成了应用程序的例行程序,每次进行转换时,视图都会堆积起来。

enter image description here

1 个答案:

答案 0 :(得分:2)

UINavigationController将保留您推送到其导航堆栈的任何控制器,直到您将其弹回。

任何UIViewController将保留一个模态呈现的控制器,直到子控制器被解除为止。

在任何一种情况下,每个控制器至少会消耗一些内存,直到你将其删除。构建不断扩展的控制器堆栈的应用程序可能会遇到许多问题,包括:

  1. 你最终会耗尽内存,速度取决于每个控制器使用多少内存。
  2. 如果背景中的许多控制器对同一事件作出反应,您可能会看到意外的副作用。
  3. 如果用户在控制器的实例中改变状态,他们可能会感到困惑,推动控制器的实例' B'在它之上,然后"返回"第二个例子是' A'添加到州的顶部。由于他们正在查看新控制器并查看任何选择,因此滚动位置,用户输入或他们在上一个实例上设置的其他状态可能会丢失。
  4. 包括你在内的开发人员可能会害怕触摸这个应用程序。
  5. 我怀疑如果您将控制器管理与您向用户呈现的任何视觉比喻相匹配,每个人都将获得更好的体验。