現在表示されているビューコントローラー(スーパービュー!= nil)がアンロードされているときにメモリ警告を処理する方法について、私は完全に混乱しています。セットアップは、rootViewController としての tabbarcontroller、ビュー コントローラーを含むナビゲーション コントローラー、たとえばビュー コントローラー A です。ビュー コントローラー B をビュー コントローラー A のナビゲーション スタックにプッシュします。メモリ警告をシミュレートします。
1) ビュー コントローラー A はメモリ警告を受け取り、そのビューはアンロードされますが、すべて問題ありません。
2) ビュー コントローラー B (現在表示されている) にメモリ警告が表示されます。そのスーパービューを印刷します。ナビコントローラーの
(gdb) po [[self view] superview]
<UIViewControllerWrapperView: 0x12310c80; frame = (0 64; 1024 655); autoresize = W+H; layer = <CALayer: 0x12310cb0>>>
(gdb) po [self navigationController]
<UINavigationController: 0x714efd0>
(gdb) po [[[self navigationController] view] superview]
<UIViewControllerWrapperView: 0x740b0c0; frame = (0 0; 1024 719); autoresize = W+H; layer = <CALayer: 0x740b140>>
/*** can you see how desperate i am? : ) ***/
(gdb) po [[[[[self view] window] rootViewController] view] superview]
<UIWindow: 0x7162910; frame = (0 0; 768 1024); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x7163660>>
3) 私が次に知っていることは、目に見えるビュー コントローラーのビューがアンロードされていることです (ビュー コントローラーの viewDidUnload メソッドのブレークポイントがヒットします)。
私は現在このView Controllerを見ているので、戻ってナビゲートしない限り、そのviewDidLoadは再び呼び出されることはありません。これは、superview != nil のときにビューがアンロードされない!という多くの投稿と矛盾しているようで、スタック全体を調査しました!
明確にするために、viewDidUnloadで何をすべきか、または解放するデータの種類などを尋ねていません。フレームワークが、明らかにまだビュー階層の一部であるビューコントローラーにdidReceiveMemoryWarningを送信している理由を理解しようとしています。
考え?