2012-08-22 100 views
0

基本上我有一個具有介紹性視圖的應用程序。一旦你達到某個視圖,以前的視圖根本就不能訪問,所以我想從堆棧中刪除它們並釋放它們已經消耗的任何內存。做這個的最好方式是什麼?現在我正在做類似釋放導航控制器堆棧中特定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]; 

這是否真的釋放這些視圖消耗的內存?或者它只是從堆棧數組中刪除視圖?

回答

2

當您準備推送「某個視圖」時,請使用setViewControllers:animated:將堆棧替換爲您的最終ViewController,而不是使用pushViewController將其添加到堆棧。

假設控制器= '某些視圖' ...

不做[self.navigation pushViewController:控制器動畫:是],執行:

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

這將釋放所有先前視圖控制器,他們的dealloc方法將被調用,內存釋放等

相關問題