2011-06-19 25 views
2

私は次のことを頭に入れようとしています。UIViewController.viewのメモリ割り当て/割り当て解除

私は、必要以上にメモリを必要とするようなアプリをデバッグしています。私は楽器/割り当て、そのメモリ使用量すべての割り当て/ライブはループに入る前に約5 MBで上記のコードを実行すると

NSLog(@"allocating 10000 instances of the MyViewController"); 
for (int i=0; i<10000; i++) { 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    MyViewController *aController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; 
    if (aController.view == nil) {} 
    [aController release]; 
    [pool drain]; 
} 
NSLog(@"done allocating 10000 instances of MyViewController"); 

:私は「衝突試験」のViewControllerに次のコードを追加しました。ループ実行後は約24Mbです。

if (aController.view == nil) {}行を無効にして同じコードを実行すると、メモリが大幅に増加することはありません。

UIViewControllerは、aController.viewを使用しているため、自動的にloadView()を呼び出します。だから私はmemの使用の一時的な増加を理解することができます。しかし、コントローラーでreleaseと呼ぶと、そのメモリーは割り振り解除されるべきではありませんか?または、ビューのために割り当てられたメモリ(のライブバイトの下にリストされています)は、実際にはメモリ不足の状態でのみ解放されますか?

+2

コントローラ/ビューにリークがあるようです。 '-dealloc'でいくつかのIBOutletをnilに設定するのを忘れましたか? –

+0

はい、それらはすべて説明されています。私は4つあり、それぞれが 'dealloc'の中で以下のように解放されています:' [myButton release]、myButton = nil' – user601632

+0

"リークがあるように聞こえる"ものがある場合は、インストゥルメントでテストプログラムを実行すると(実際に漏れがあるかどうかは、「漏れ」の計測器が表示されます) – jtbandes

答えて

0

メッセージ[viewController view]は、ビューをロードします(必要な場合)。