注:この質問は古くなっています—viewDidUnload
は非推奨のiOS 6です
UIViewControllerのviewDidUnloadはいつ自動的に呼び出されますか?はい、ビューがアンロードされるとわかります。しかし、それはいつ自動的に起こりますか?どうすれば手動でできますか?ありがとう。
シミュレータでメモリ警告を発行すると(メニューを見てください)、これは表示されていないビューに接続されているビューコントローラに対して呼び出されます。
これは、デフォルトでビューコントローラーがメモリ警告通知に登録され、現在使用されていないビューはビューコントローラーによってアンロードされるためです。追加の節約のために、必要なものをすべてクリーンアップできるように、viewDidUnloadメソッドがあります。メモリ(または、アンロードされるビューによって解放されるはずのメモリを解放するために、いくつかのIBOutletを保持している場合)。
通常、deallocで解放するIBOutletはすべて、このメソッドでも解放する必要があります(および参照をnilに設定)。
シミュレータでメモリ警告を手動で発行することに加えて、プログラムで1つを発行して、
- (void)_simulateLowMemoryWarning {
// Send out MemoryWarningNotification
[[NSNotificationCenter defaultCenter] postNotificationName:UIApplicationDidReceiveMemoryWarningNotification
object:[UIApplication sharedApplication]];
// Manually call applicationDidReceiveMemoryWarning
[[[UIApplication sharedApplication] delegate] applicationDidReceiveMemoryWarning:[UIApplication sharedApplication]];
}
その後、タイマーを使用して5秒ごとにこれを発生させることができます
static NSTimer *gLowMemoryTimer = nil;
- (void)stopLowMemoryTimer {
[gLowMemoryTimer invalidate];
gLowMemoryTimer = nil;
}
- (void)startLowMemoryTimer {
if (gLowMemoryTimer) {
[self _stopLowMemoryTimer];
}
gLowMemoryTimer = [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(_simulateLowMemoryWarning) userInfo:nil repeats:YES];
}
-viewDidUnload
は、viewcontrollerのビュープロパティがnilに手動または最も一般的にdidReceiveMemoryWarning:
。
iOS 6.x以降
これは古い質問であることはわかっていますが、iOS 6のviewDidUnload
APIの変更、つまりiOS 6ではviewDidUnload
が呼び出されなくなったことについて、回答を提出する必要があると思いますそして廃止されました。
メモリ不足の状態でviewDidUnloadが呼び出されました。 viewDidLoadメソッドでロードしたものをアンロードする必要があります。アクセサメソッドを呼び出してオブジェクトの所有権を放棄し、オブジェクトをnilに設定する必要があります。アウトレットの場合、オブジェクトは自身を解放するため、オブジェクト参照を安全にnilに設定できます。合成されたプロパティでない場合は、nilに設定するよりも、まずオブジェクトを解放する必要があります。