1

didRecieveMemoryWarningメソッドを使用して一番下に移動する必要があります。私はこのフォーラムでこのトピックについて30のスレッドのように読みました。そして、すべての答えは異なります。

  1. 最初の質問。didRecieveMemoryWarningでオブジェクトを解放する必要がありますか、それとも単にnilに設定する必要がありますか?または両方?

  2. 私は、didRecieveMemoryWarningメソッドでtableViewデータソースがある場合はそれを解放する必要があることを読みました。また、このメソッドでIBOutletsをリリースする必要があることも読みました。私は混乱しています、ここで何が正しいのですか?

  3. viewDidLoadで開始したオブジェクトだけがdidRecieveMemoryWarningでリリースする必要がありますか?labelTitleText.text = @"Woodie Guthrie"それとも、私が割り当てたばかりのプロパティですか。たとえば、次のようになります。labelTitleTextは私のヘッダーファイルのプロパティです。

今日の私のアプリケーションでは、deallocメソッド内のすべて(上記の例のように割り当てられたラベルも)をリリースします。これは正しくないと思います。

理解しやすくなるように、小さなコード例を本当にいただければ幸いです。これは、他のスレッドに欠けているものです。

みなさん、良い一日を!

4

2 に答える 2

2

didRecieveMemoryWarning は、電話のメモリが少なくなると呼び出されます。後で必要になったときに取得できるリソースはすべて解放する必要があります。キャッシュ、未使用のオブジェクトなどについて考えてみてください。

アプリが正しく動作するために必要なため、didRecieveMemoryWarning で IBOutlets などを解放しないでください。

ただし、これらは viewDidUnload などのメソッドで、そしてもちろん、あなたが述べたように dealloc で解放する必要があります。(ある時点でそれらを保持している場合、おそらくプロパティを使用しています)

于 2010-10-06T07:29:57.890 に答える
2

肝心なのは、メモリ警告が表示されたときに、実際には何も解放する必要がないということです。ただし、何もしないと、一部のアプリが強制終了され、そのアプリがあなたのものになる可能性が大幅に高まります。しかし、そうではないかもしれません。

割り当てたすべてのメモリを実際に使用している場合 (たとえば、後で再度リロードできる画像ではないなど)、何もせず (または念のために重要な状態を保存して)、他のバックグラウンド プロセスが強制終了または枯渇することを期待します。あなたが思っているよりも多くのアプリがこれを行っています。

リリースできるものがある場合は、大きなもの (少なくとも 1 つの VM ページ以上) をリリースします。小さなもの (短い文字列など) を解放しても、一部のバックグラウンド アプリが強制終了または飢餓状態になるかどうかに関して、ほとんど違いはありません。

メモリを解放 (またはオブジェクトを解放) せずにポインタ (またはオブジェクト) を nil に設定することは、メモリ リークが発生するだけであり、悪いことが起こる可能性が高くなるため、非常に悪い形式です。メモリ/オブジェクトを解放/解放した後、それらを nil に設定できます。

于 2010-10-06T07:53:24.573 に答える