2011-06-30 17 views
2

私のアプリケーションでは、今はCore Dataが異なるオブジェクトのためにメモリ内のスペースを割り当てているようですが、そのメモリを解放することは決してありません。アプリケーションによって使用されるメモリは、実行されるほど多くのメモリを使用し続けます。GC環境では、いつCore Dataが割り当てられたメモリを解放しますか?

すべてのメモリがクリーンアップされることを保証するコアデータコンテキスト(または他のもの)への呼び出しがありますか?コアデータはいつ割り当てられたメモリを解放しますか?

ありがとうございます!

+0

"すべてのメモリがクリーンアップされることを保証するコアデータコンテキスト(または他のもの)への呼び出しはありますか?"もちろんありません。 GCの土地では、何かが分かっている限り、オブジェクトは生き続ける。何らかの理由でオブジェクトが解放されてしまった場合、後でクラッシュする可能性があります。何かを知っている間にオブジェクトを解放すると、GCなしで何が起こるのかが正確にわかります。他の質問には回答があるかもしれませんが、コアデータが何であるかを知るには十分ではありませんので、他の人が答えるようにしておきます。 –

+0

Peterに感謝します。それは私にとっては奇妙なことです。コアデータコンテキストオブジェクトはアプリケーションの存続期間を通じて使用されているように見えるので、アプリケーションが終了するか終了するまで、コンテキストオブジェクトに関連するもの(メモリ内で宣言されたもの)はすべて解放されません。 – Andrei

+0

まだすべてが握られているのは解放されません。うまくいけば、コアデータは、永遠にすべてを保持しないほどスマートです。 @ JeremyPのリンクは有望に見えます。 –

答えて

3

コアデータがオブジェクトで終了している場合でも、ガベージコレクタは必ずしもすぐにそれを収集するとは限りません。

ガベージコレクタには、収集をトリガする2つの方法、collectIfNeededおよびcollectExhaustivelyがあります。前者は現時点での回収を保証しておらず、後者はおそらくあなたのアプリケーションを少し止めるでしょう。

コアデータを強制的にオブジェクトにフォールトさせることができます。詳細は、Reducing Memory Overheadを参照してください。

関連する問題