iOS 6では、viewWillUnload
とviewDidUnload
は推奨されず、UIViewControllerはメモリ警告時に画面に表示されないビューをアンロードしなくなりました。 View Controller Programming Guideには、この動作を手動で復元する方法の例があります。ここiOS 6でメモリ警告(Apple docの欠陥)でビューをアンロードする適切な方法は何ですか?
は、コードサンプルである:サンプルコード下
- (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 Controllerがメモリ警告を受け取った場合は、そのビューを行if ([self.view window] == nil)
にロードしてから、クリーンアップして再度解放します。せいぜい、これは非効率的です。最悪の場合、複雑なビュー階層とサポートするデータがロードされると、メモリ条件が悪化します。私は、iOSシミュレータでこの動作を確認しました。
私は確かにこれをコードすることができますが、アップル社のドキュメントにこのようなエラーがあるのは奇妙なようです。何か不足していますか?
'viewDidUnload'と' viewWillUnload'は後方互換性のためにありますか?もしそうなら、これら2つのメソッドはiOS 6ではまったく呼び出されないと言うコードをコメントすることをお勧めします([UIViewController docs](http://developer.apple.com/library/ios/#documentation /uikit/reference/UIViewController_Class/DeprecationAppendix/AppendixADeprecatedAPI.html#//apple_ref/occ/instm/UIViewController/viewWillUnload)状態)。 –
良い提案、thx。完了しました。 – XJones
カスタム ' - my_view {Will | Did} Unload'の代わりに、' - didReceiveMemoryWarning'で '[self viewWillUnload]'と '[self viewDidUnload]'を呼び出せればいいのですか? – Ali