【发布时间】:2012-03-07 18:53:43
【问题描述】:
我创建了一个导航控制器,其中一个视图控制器可能会被多次推送..例如,如果我们说我们创建了一个内存位置为<x1234> 的视图控制器,我在索引 5 处添加一次,在索引 7 处添加一次.. .内存呢?一段时间后它会崩溃还是没有问题,因为我总是使用同一个对象?
【问题讨论】:
标签: objective-c ios memory-management uinavigationcontroller
我创建了一个导航控制器,其中一个视图控制器可能会被多次推送..例如,如果我们说我们创建了一个内存位置为<x1234> 的视图控制器,我在索引 5 处添加一次,在索引 7 处添加一次.. .内存呢?一段时间后它会崩溃还是没有问题,因为我总是使用同一个对象?
【问题讨论】:
标签: objective-c ios memory-management uinavigationcontroller
您不能将完全相同的对象推送到导航控制器堆栈more than once:
重要在 iOS 2.2 及更高版本中,如果 viewController 中的对象 参数已经在导航堆栈上,这个方法会抛出一个 例外。在早期版本的 iOS 中,该方法根本不执行任何操作。
但是你可以推送同一个视图控制器的不同实例。
iOS 将发送内存警告(您可以在其中清除任何可以重新创建的临时存储)并卸载所有不可见的视图。这意味着新视图控制器的开销相对较小但不为零。 有一个限制,超过这个限制你就会遇到问题,但在实践中,只要你正确地遵守内存管理规则,这个限制是相当高的。肯定高于制作可用 UI 所施加的限制。
【讨论】:
您不能将一个视图控制器多次添加到一个堆栈中。但是您可以创建多个实例(它们将具有不同的内存位置)并将它们推入导航堆栈。当然,如果您将创建 >1000 个实例,那么您的应用程序将会崩溃。实际上,堆栈通常包含 1-10 个视图控制器,并且一切正常。
【讨论】: