【问题标题】:iOS Swift 4: ist it more efficient to dismiss or present a ViewControlleriOS Swift 4:关闭或呈现 ViewController 是否更有效
【发布时间】:2019-05-04 13:18:12
【问题描述】:

在 iOS 应用程序中,要在屏幕之间移动,我可以呈现一个新的 ViewController(“向前移动”)或关闭当前的 ViewController(“向后移动”)。

在我的幼稚理解中,这只是一种在应用程序保存的 ViewController 堆栈中来回移动的方式。

我有一个直观的偏好,即关闭一个 ViewController(如果可能)而不是呈现一个新的 ViewController。它让我感觉在有限的 ViewControllers 集合中操作,这反过来又让我觉得应用程序是内存高效的。

假设我在视图 A 上并想显示视图 B,然后呈现 A 将导致堆栈 A-B-A,而解除 B 将使堆栈保持在 A。

我的问题是:这合理吗?通过呈现新的 ViewController 来永久工作是否有任何(程序化的)缺点?是内存效率低吗?

我想知道应用程序保存了多少以前的视图以及堆栈可以获得多长时间,以及这是否是尽可能关闭的理由。

【问题讨论】:

  • 如果您想在 A 之后显示相同的 A - B,为什么还要显示另一个 A?除非第二个(A)与第一个不同。在这种情况下,您应该展示一个新的。这与内存效率无关,更多的是对用户有意义的视图层次结构。如果你正在前进,你应该展示/推动。如果您向后移动,则应该关闭/弹出。它与视图控制器是否相同无关。
  • 你应该需要深入了解UINavigationController

标签: ios swift view viewcontroller


【解决方案1】:

我不能 100% 确定我是否正确理解了您,但它似乎在记忆方面效率低下,并且不确定它有多大可能。您基本上是想继续倒退,只是忽略观点,对吗?

意思是当你加载B,然后加载A,然后你想解雇A再去B?我这样理解好吗?

在这种情况下,视图必须在一个恒定的“堆栈”中,我相信这会使事情变得更慢,但更重要的是,从用户的角度和用户体验来看,这是他们根本不习惯的:/

【讨论】:

    【解决方案2】:

    我的理解是:如果你想再次显示 A,那么你应该回到你已经拥有的屏幕 A 的实例。在某些特殊情况下,拥有多个 A 实例是有意义的(例如不同对象的详细信息屏幕),但即便如此:您绝对不应该做的是构建一个永无止境的视图控制器堆栈,因为正如您已经假设的那样:这将消耗大量不必要的内存。

    也许您应该查看现有应用程序或 Apple 人机界面指南,并尝试更好地了解其视图层次结构的工作原理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-15
      • 2020-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多