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

「その特定のビュー」をプッシュする準備ができたら、pushViewController を使用してスタックに追加する代わりに、setViewControllers:animated: を使用してスタックを最終的な ViewController に置き換えます。

controller = 'その特定のビュー' と仮定すると...

[self.navigation pushViewController:controller animation:YES] を行わないでください:

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

これにより、以前のすべてのView Controllerが解放され、それらのdeallocメソッドが呼び出され、メモリが解放されます。

于 2012-08-22T20:28:27.800 に答える