iOS 6ではviewWillUnload
、viewDidUnload
は非推奨になり、UIViewControllersは、メモリ警告中に画面に表示されないビューをアンロードしなくなりました。View Controllerプログラミングガイドには、この動作を手動で復元する方法の例があります。
コードサンプルは次のとおりです。
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Add code to clean up any of your own resources that are no longer necessary.
if ([self.view window] == nil)
{
// Add code to preserve data stored in the views that might be
// needed later.
// Add code to clean up other strong references to the view in
// the view hierarchy.
self.view = nil;
}
}
コードサンプルの下には、次の注記があります。
次にviewプロパティにアクセスすると、最初のときとまったく同じようにビューが再ロードされます。
ここには明らかな欠陥があります。ビューをロードしていないViewControllerがメモリ警告を受信した場合、そのビューを行にロードしてif ([self.view window] == nil)
から、クリーンアップして再度解放します。せいぜい、これは非効率的です。最悪の場合、複雑なビュー階層とサポートデータがロードされると、メモリ状態が悪化します。iOSシミュレーターでこの動作を確認しました。
私は確かにこれを回避してコーディングすることができますが、Appleドキュメントにそのようなエラーがあるのは奇妙に思えます。私は何かが足りないのですか?