释放navigationController堆栈中特定UIVIewController的内存

时间:2012-08-22 20:20:23

标签: iphone objective-c ios memory-management 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];

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

1 个答案:

答案 0 :(得分:2)

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

假设controller ='某个视图'......

不要做[self.navigation pushViewController:controller animated:YES],执行:

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

这将释放所有以前的View Controllers,它们的dealloc方法将被调用,内存释放等