1

View Controller A をルート View Controller として UINavigationViewController を作成し、View Controller B をプッシュします。シミュレーターでメモリ警告をシミュレートすると、A の didReceiveMemoryWarning のみが呼び出されます。確かに、A と B の両方で didReceiveMemoryWarning をオーバーライドしました。最終的に、A の didReceiveMemoryWarning 内で B の didReceiveMemoryWarning を呼び出すことで、問題を回避しました。ただし、B のメソッドが自動的に呼び出される理由はわかりません。A の viewDidUnload と B の viewDidUnload は両方とも期待どおりに呼び出されます。これは、B からモーダル ビュー コントローラーを提示しているときに警告をトリガーするためです。

ビュー コントローラー B がナビゲーション コントローラーのルートである場合、問題なく didReceiveMemoryWarning が呼び出されます。

4

1 に答える 1

1

これについて私が見た最も一般的な原因は次のとおりです。

  • [[NSNotificationCenter defaultCenter] removeObserver:self]ビューコントローラーの1つを呼び出しています。UIViewControllerはこのような通知を登録するため、これを行うべきではありません。

  • iOS 5 のコンテインメント メソッドや通常のビュー コントローラーのプレゼンテーション メソッド (presentViewController: とその仲間) を使用せずに、別のビュー コントローラーのビューをサブビューとして追加するなど、ビュー コントローラーの階層で奇妙なことをしています。

于 2012-08-26T14:32:34.830 に答える