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 が呼び出されます。