【问题标题】:uinavigation controller stack memory managementuinavigationcontroller 堆栈内存管理
【发布时间】:2012-03-07 18:53:43
【问题描述】:

我创建了一个导航控制器,其中一个视图控制器可能会被多次推送..例如,如果我们说我们创建了一个内存位置为<x1234> 的视图控制器,我在索引 5 处添加一次,在索引 7 处添加一次.. .内存呢?一段时间后它会崩溃还是没有问题,因为我总是使用同一个对象?

【问题讨论】:

    标签: objective-c ios memory-management uinavigationcontroller


    【解决方案1】:

    您不能将完全相同的对象推送到导航控制器堆栈more than once

    重要在 iOS 2.2 及更高版本中,如果 viewController 中的对象 参数已经在导航堆栈上,这个方法会抛出一个 例外。在早期版本的 iOS 中,该方法根本不执行任何操作。

    但是你可以推送同一个视图控制器的不同实例

    iOS 将发送内存警告(您可以在其中清除任何可以重新创建的临时存储)并卸载所有不可见的视图。这意味着新视图控制器的开销相对较小但不为零。 有一个限制,超过这个限制你就会遇到问题,但在实践中,只要你正确地遵守内存管理规则,这个限制是相当高的。肯定高于制作可用 UI 所施加的限制。

    【讨论】:

    • 我想跟踪堆栈...如果不是控制器数组怎么会发生这种情况?
    • 视图控制器仍在堆栈中。它只是卸载与之关联的视图。
    【解决方案2】:

    您不能将一个视图控制器多次添加到一个堆栈中。但是您可以创建多个实例(它们将具有不同的内存位置)并将它们推入导航堆栈。当然,如果您将创建 >1000 个实例,那么您的应用程序将会崩溃。实际上,堆栈通常包含 1-10 个视图控制器,并且一切正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-10
      • 2017-04-28
      • 1970-01-01
      • 1970-01-01
      • 2018-02-17
      • 2015-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多