释放导航控制器堆栈中特定UIVIewController的内存

问题描述:

基本上我有一个具有介绍性视图的应用程序。一旦你达到某个视图,以前的视图根本就不能访问,所以我想从堆栈中删除它们并释放它们已经消耗的任何内存。做这个的最好方式是什么?现在我正在做类似释放导航控制器堆栈中特定UIVIewController的内存

NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray:self.navigationController.viewControllers]; 
NSArray *allControllersCopy2 = [allViewControllers copy]; 
for (id object in allControllersCopy2) { 
    if([allControllersCopy2 indexOfObject:object] == ([allControllersCopy2 count] - 1)){ 
     NSLog(@"IGNORE CURRENT VIEW"); 
    } 
    else{ 
     [allViewControllers removeObject:object]; 
     [object release]; 
    } 

} 
self.navigationController.viewControllers = allViewControllers; 
[allControllersCopy2 release]; 

这是否真的释放这些视图消耗的内存?或者它只是从堆栈数组中删除视图?

当您准备推送“某个视图”时,请使用setViewControllers:animated:将堆栈替换为您的最终ViewController,而不是使用pushViewController将其添加到堆栈。

假设控制器= '某些视图' ...

不做[self.navigation pushViewController:控制器动画:是],执行:

[self.navigationController setViewControllers:[NSArray arrayWithObject:controller] animated:YES]; 

这将释放所有先前视图控制器,他们的dealloc方法将被调用,内存释放等