iOS6 では、このメソッドviewDidUnload
は非推奨になり、メモリ管理がUIViewController
. ここで、新しいパターンについて簡単に説明します。
ビュー コントローラーでより多くのメモリを占有する部分は、ビュー (そしてもちろん、最終的に作成する巨大なデータ) です。ビュー自体はそれほど多くのメモリを消費しません。バッキング ストアであり、描画される部分です (最も興味深いのは ですCABackingStore
)。この新しいパターンは、ウィンドウに表示されないビュー コントローラーのビューが所有するすべてのバッキング ストアが占有するメモリを揮発性としてチェックするようです。メモリ警告が発生すると、このバッキング ストアはメモリから消去されます。この方法を使用すると、非常にコストのかかるビューを再作成するプロセスを節約できます。
Apple は、viewDidUnload/viewWillUnload を iOS5 プロジェクトから削除しても安全であり、デプロイ ターゲットを iOS5 に設定しても、テンプレートにはこれらのメソッドが表示されないと述べています。ビューが所有するアウトレットが弱い場合、スーパークラスの実装でビュー コントローラーのビューを解放すると、ARC のおかげでリークやゾンビが発生することなく、すべてが正しく割り当て解除されることを理解しています。
私はこの新しいアプローチを本当に高く評価しているので、この種の状況には自信がありません: ビュー コントローラーとそのビューがあるとします。このビューは、ビュー コントローラーの xib で作成されたさまざまなビューをホストするコンテンツ ビューにすぎません。それらを実行時に動的に。このビューのアウトレットを作成すると、それらは自動的にストロングとして作成されます。これは、「メイン ビュー」がそれらを所有していないため意味があります。
新しいルールに関して、このビューのバッキング ストアは、iOS6 のメイン ビューによって所有されていないため、揮発性として署名されませviewDidUnLoad
ん。
どうすればこの状況を管理できますか? didReceiveMemoryWarning 内でそれらを解放するのは正しいでしょうか? ビューが一度だけロードされる場合、iOS6でそれらを再作成できますか?