uinavigation控制器堆栈内存管理

时间:2012-02-16 11:07:48

标签: objective-c ios memory-management uinavigationcontroller

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

2 个答案:

答案 0 :(得分:1)

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

  

重要在iOS 2.2及更高版本中,如果是viewController中的对象   参数已经在导航堆栈上,此方法抛出一个   例外。在早期版本的iOS中,该方法无效。

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

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

答案 1 :(得分:0)

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