ARC を使用してコードを記述していることを考えると、以下からインスタンス化された のnil
プロパティを使用する必要があります。viewDidUnload
XIB (ここでは、IDE からニリングが生成されることがあります)
初期化子からのものであり、IBOutlet を持っていない
- 弱い
?
ARC を使用してコードを記述していることを考えると、以下からインスタンス化された のnil
プロパティを使用する必要があります。viewDidUnload
XIB (ここでは、IDE からニリングが生成されることがあります)
初期化子からのものであり、IBOutlet を持っていない
?
の目的はviewDidUnload
、メモリ警告を受け取ったときにビューが削除されたために存在しなくなった可能性があるユーザー インターフェイス オブジェクトへの参照を削除する機会をアプリに与えることです。したがって:
ユーザー インターフェイスコントロールをに設定する必要がありますnil
(ビューがアンロードされているため)。プロパティには必要ありません (通常、このトピックに関するApple のガイダンスに従ってweak
いるはずです) が、Xcode がそれを挿入する場合、それは問題ではありません。何をすべきかのガイダンスについては、リソース プログラミング ガイド: Nib ファイルの「メモリ警告」セクションを参照してください。weak
viewDidUnload
また、 で設定した非ユーザー インターフェイス オブジェクトの場合、特に ARC を使用していない場合は (たとえば、誤ってインスタンス変数を使用すると、リークが発生する可能性があります)、やみくもにinにviewDidLoad
設定することには注意が必要です。また、回復されるメモリの量と、そのデータを再取得するための「コスト」とのバランスをとることをお勧めします (たとえば、リモート サーバーからの場合)。とにかく、UI 以外のオブジェクトのメモリの解放は で処理することをお勧めします。nil
viewDidUnload
nil
didReceiveMemoryWarning
私の考えでは、viewDidUnload
存在しなくなった可能性のあるユーザー インターフェイス オブジェクトへの参照を保持していないことを確認するチャンスと考えており、didReceiveMemoryWarning
メモリを回復するために安全に消去できるキャッシュやその他の非 UI 関連アイテムを空にしています。 . また、iOS 6 について懸念がある場合は、の取り扱いviewDidUnload
が変更される可能性があることに注意してください。NDA により、それについて公に議論することはできませんが、iOS 6 ベータ 4 のリリース ノートを参照して、への参照viewDidUnload
。
あなたの一般的なルール:
nil
すべてstrong IBOutlets
のみ。weak
放っておいてください。nil
でインスタンス化されたすべてのプロパティ、およびでviewDidLoad
はありません 。init
initWithCoder:
initWithNibName:bundle:
また、より多くのメモリを解放するためにnil
、「オンザフライ」で再作成されたプロパティまたはチェックが必要です。nil