从堆栈中永久删除UIViewController

时间:2012-02-10 14:51:22

标签: objective-c ios uiviewcontroller

以下是我删除永远不会在应用程序中再次使用的UIViewControllers的方法。

NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray: self.navigationController.viewControllers];
    [allViewControllers removeObjectAtIndex:0];
    [allViewControllers removeObjectAtIndex:1];
  1. 这是从堆栈中删除视图的正确方法吗?

  2. 在使用Instruments运行应用程序时,我注意到当应用程序进入执行上述代码的阶段时,内存未被释放。这有什么问题?

3 个答案:

答案 0 :(得分:3)

创建NSMutableArray的新viewControllers,然后从新的NSMutableArray中删除,什么都不做。 viewControllers仍保留navigationController

答案 1 :(得分:0)

你实际上并没有释放viewControllers。你只是将保留计数增加+1,然后减少-1。

实际上,没有任何内容会受到您为释放viewControllers而编写的代码的影响。

对于NavigationController,您可以调用popToRootViewController来释放除NavigationController的基本/根视图控制器之外的所有其他视图控制器。

答案 2 :(得分:0)

通过将视图控制器分配到新的可变数组中,您将其保留计数增加1,删除它们会使其保留计数减少1,因此净效果为零。您要做的是在删除导航控制器之后替换属于导航控制器的视图控制器,使导航控制器释放您的旧实例。

NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];
[allViewControllers removeObjectAtIndex:0];
[allViewControllers removeObjectAtIndex:1];

[self.navigationController setViewControllers:allViewControllers animated:YES];