0

基本上我有一个具有介绍性视图的应用程序。一旦你到达某个视图,之前的视图就根本无法访问,所以我想将它们从堆栈中删除并释放它们消耗的任何内存。做这个的最好方式是什么?现在我正在做类似的事情

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];

这真的会释放这些视图消耗的内存吗?还是只是从堆栈数组中删除视图?

4

1 回答 1

2

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

假设控制器 = '那个特定的视图'...

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

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

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

于 2012-08-22T20:28:27.800 回答