8

NSArrayプライベート変数を持つビュー コントローラーがあります。変数はviewDidLoadメソッドで初期化されます。didReceiveMemoryWarningが呼び出される場合、いくつかの疑問が生じます。

  1. プライベート変数をに設定する必要がありnilますか?
  2. 設定した場合nil、どの方法で再作成する必要がありますか? ビューコントローラーはviewDidLoadメソッドを呼び出して再作成しますか?

ビューの他のメソッドにはこの変数が必要であり、それがnil.

ありがとうございました!

4

5 に答える 5

4

通常nil、セッターを介して割り当てることにより、プライベート プロパティをアンロードします (例: self.propertyName = nil)。または、 release を呼び出した後に ivar を nil に設定することもできます[_propertyName release]; _propertyName = nil;が、前者の方が望ましいです。

このdidReceiveMemoryWarningメソッドは、メモリ不足の状況が発生したときに呼び出されます。現在表示されているUIを担当するビューコントローラーを含む、すべてのビューコントローラーで呼び出されます!

したがって、呼び出しを受け取ったときに任意にデータをアンロードすることはできませんdidReceiveMemoryWarning。現在ディスプレイに表示されている場合、View Controller はそのデータを必要とする可能性があります。

一般的な原則として、didReceiveMemoryWarningはメモリを解放するのに役立つリソースはすべて削除できますが、すぐに必要とされないリソースのみを削除できます。たとえば、OpenGL ゲームでは、現在ディスプレイに表示されているテクスチャをアンロードしません。ただし、私の最後の段落を参照してください。

通常、必要なときにリソースがロードされていることを確認し、そうでない場合はロードすることで、リソースをリロードします。

通常サイズの単一の文字列などの小さなリソースを解放/解放する価値はありません。かなりの量のメモリを占有するアイテムに集中する必要があります。

舞台裏でのメモリ管理の最近の進歩により、最近では実際にデータをアンロードする必要が少なくなりました。オペレーティング システムは、圧縮されていない画像データなどを舞台裏でアンロードおよび再ロードできます。

Hot Licks が言及しているように、シミュレーターにはメモリ警告をシミュレートするオプションがあります。アプリのさまざまなポイントでこのメモリ警告をトリガーして、アプリの動作を確認する価値があります。

于 2013-05-31T15:00:28.743 に答える
0

このViewDidLoadメソッドは、ViewController が初期化されるときに 1 回だけ呼び出されます。NSArray にデータをリロードする必要がある場合は、必要に応じて独自のメソッドを呼び出してそれを行う必要があります。

この配列がコードのさまざまな部分で使用されている場合は、コード構造を再設計して、1 つのオブジェクトのみにデータが大量に集中するのを避けることを検討する必要があります。

編集:以下のコメントで@occulusが指摘しているように、ビューが初期化されたときではなく、ビューがViewControllerによってロードされたときに呼び出されます..私の間違い

于 2013-05-31T10:12:39.733 に答える