1

ARC を使用してコードを記述していることを考えると、以下からインスタンス化された のnilプロパティを使用する必要があります。viewDidUnload

  1. XIB (ここでは、IDE からニリングが生成されることがあります)

  2. 初期化子からのものであり、IBOutlet を持っていない

  3. 弱い

?

4

2 に答える 2

1

の目的はviewDidUnload、メモリ警告を受け取ったときにビューが削除されたために存在しなくなった可能性があるユーザー インターフェイス オブジェクトへの参照を削除する機会をアプリに与えることです。したがって:

  1. ユーザー インターフェイスコントロールをに設定する必要がありますnil(ビューがアンロードされているため)。プロパティには必要ありません (通常、このトピックに関するApple のガイダンスに従ってweakいるはずです) が、Xcode がそれを挿入する場合、それは問題ではありません。何をすべきかのガイダンスについては、リソース プログラミング ガイド: Nib ファイルの「メモリ警告」セクションを参照してください。weakviewDidUnload

  2. また、 で設定した非ユーザー インターフェイス オブジェクトの場合、特に ARC を使用していない場合は (たとえば、誤ってインスタンス変数を使用すると、リークが発生する可能性があります)、やみくもにinにviewDidLoad設定することには注意が必要です。また、回復されるメモリの量と、そのデータを再取得するための「コスト」とのバランスをとることをお勧めします (たとえば、リモート サーバーからの場合)。とにかく、UI 以外のオブジェクトのメモリの解放は で処理することをお勧めします。nilviewDidUnloadnildidReceiveMemoryWarning

私の考えでは、viewDidUnload存在しなくなった可能性のあるユーザー インターフェイス オブジェクトへの参照を保持していないことを確認するチャンスと考えており、didReceiveMemoryWarningメモリを回復するために安全に消去できるキャッシュやその他の非 UI 関連アイテムを空にしています。 . また、iOS 6 について懸念がある場合は、の取り扱いviewDidUnloadが変更される可能性があることに注意してください。NDA により、それについて公に議論することはできませんが、iOS 6 ベータ 4 のリリース ノートを参照して、への参照viewDidUnload

于 2012-09-11T15:31:27.420 に答える
1

あなたの一般的なルール:

  1. nilすべてstrong IBOutletsのみ。weak放っておいてください。
  2. nilでインスタンス化されたすべてのプロパティ、およびでviewDidLoadはありませんinitinitWithCoder:initWithNibName:bundle:

また、より多くのメモリを解放するためにnil、「オンザフライ」で再作成されたプロパティまたはチェックが必要です。nil

于 2012-09-11T14:50:26.060 に答える