web-dev-qa-db-ja.com

UIViewController viewDidUnloadはいつ呼び出されますか?

注:この質問は古くなっています—viewDidUnloadは非推奨のiOS 6です

UIViewControllerのviewDidUnloadはいつ自動的に呼び出されますか?はい、ビューがアンロードされるとわかります。しかし、それはいつ自動的に起こりますか?どうすれば手動でできますか?ありがとう。

45
mk12

シミュレータでメモリ警告を発行すると(メニューを見てください)、これは表示されていないビューに接続されているビューコントローラに対して呼び出されます。

これは、デフォルトでビューコントローラーがメモリ警告通知に登録され、現在使用されていないビューはビューコントローラーによってアンロードされるためです。追加の節約のために、必要なものをすべてクリーンアップできるように、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];
}
37
johnboiles

-viewDidUnloadは、viewcontrollerのビュープロパティがnilに手動または最も一般的にdidReceiveMemoryWarning:

17
Rob Napier

iOS 6.x以降

これは古い質問であることはわかっていますが、iOS 6のviewDidUnload AP​​Iの変更、つまりiOS 6ではviewDidUnloadが呼び出されなくなったことについて、回答を提出する必要があると思いますそして廃止されました。

10
Beltalowda

メモリ不足の状態でviewDidUnloadが呼び出されました。 viewDidLoadメソッドでロードしたものをアンロードする必要があります。アクセサメソッドを呼び出してオブジェクトの所有権を放棄し、オブジェクトをnilに設定する必要があります。アウトレットの場合、オブジェクトは自身を解放するため、オブジェクト参照を安全にnilに設定できます。合成されたプロパティでない場合は、nilに設定するよりも、まずオブジェクトを解放する必要があります。

3
Vipin_iOSdev