2011-01-02 6 views
0

私はCocoaアプリケーションでガベージコレクションを有効にしました。 alt textココアガベージコレクションがうまくいきませんか?

なぜ私のアプリケーションはまだ多くのメモリを使用していますか?実際には、多くのメモリを使用するだけでなく、数時間稼働させておくと数ギガバイトを要しますが、これは制御不能です。 alt text

私はこの作業を行うために何か特別なことはありますか?

+1

スクリーンショットでは、 "デバッグ"設定のガベージコレクションが有効になっています。あなたは "リリース"の設定でコンパイルされたアプリをプロファイリングしていないと確信していますか? – Eimantas

+0

ガベージコレクションは、メモリリークが発生しないことを意味しません。インストゥルメントは、どのオブジェクトがまだ生きているかを示すことができます。 – Eiko

答えて

0

ありませんが、これは起こることができるいくつかの方法があります。

  1. あなたが割り当て楽器にしたり、ターゲットの環境で有効になってゾンビを持っているかもしれません。両方をチェックし、ゾンビがオフになっていることを確認してください。
  2. メモリを放棄している可能性があります(オブジェクトを保持する、決して特定のポイントの後に使用しないものであっても、決して放棄しない)。これは、ある種類のキャッシュにオブジェクトを追加し、実際にオブジェクトを削除しないと、特に簡単です。 (imageNamed:これはそうしていますので、画像をたくさん読み込んでいる場合は注意してください)。ヒープショットを使用して、どのオブジェクトが重なっているかを確認し、ヒストリーを調べて、作成された場所を確認します。また、オブジェクトグラフ計測器を使用して、何が生きているのかを確認します。

また、まっすぐに漏れているオブジェクト(おそらくデフォルトでは収集できないCFオブジェクト)です。リーク音源を選択して、何を言いたいのかを確認します。

+0

私は数秒ごとに新しい画像を表示するために "IKImageView"を使用しています。イメージは "[[NSImage alloc] initWithContentsOfFile:LocalTempImageStorage]"でNSImageにロードされ、CoreGrahicsの関数を使って "CGImageRef"に変換されます。あなたが言っていることから、これは可能性のある犯人のように聞こえる。私の選択肢は何ですか? – Nippysaurus

+0

Core Graphics関数で変換されていますか? NSImageには実際にCGImageを作成するメソッドがあります。代わりにそれを使用することを検討するかもしれません。しかし、それはまだ問題の原因で野生の推測です。インストゥルメントは、漏れているものと作成した場所を正確に伝えます。 –

関連する問題