1

私のプログラムで重大なメモリリークの問題があります。 AppleのInstrumentsを使用して私のリークを追跡しています。私のアプリが起動してから最初の数秒で、何百と何百ものリークがリストされています。問題はそれらのどれも、漏れがどこから来ているか教えてくれないようです。Cocoa/ObjCのメモリリークを修正しました

私はすべての私のクラスを経とallocedた何かが終わりにリリースされた、およびガベージコレクションが同様に有効になっていることを確認作りました。別の大きな問題は、ガベージコレクションを有効にせずにアプリを起動しようとしたところ、クラッシュしてしまっただけです。

アドバイスはありますか?

おかげ

EDIT:ソースコードが必要な場合、私は

答えて

2

あなたの質問には「ガベージコレクション」というタグが付けられています。

GCをオンにしていますか?もしそうなら、それはコマンドラインツールですか? main()の最初の項目としてobjc_startCollectorThread()を呼び出しましたか?あなたはGCがオンになっている場合は

、ヒョウの分析は、特定の状況ではかなりの数の偽陽性が表示されますリークが発生します。 Snow Leopardにアクセスできない場合は、ツールが大幅に改善されたので、そこで分析を行うことをお勧めします。

打ち鳴らす静的アナライザ&インスツルメンツは完全に直交しています。静的アナライザーは、コード内の潜在的なリークのすべてを検出しないため、両方を使用する必要があります。特に、キャッシュの成長が無制限である場合や、誤ってオブジェクトグラフをルーティングするグローバルな変更可能なセットが存在する状況は検出されません。

スタティックアナライザが見つけたすべての問題を修正したら、Instrumentsを使用してください。

+0

GCはオンになっています。私はアナライザによって報告されたすべてのリークを修正しましたが、私が知らない理由のため、Instrumentsは依然として多数のメモリリークを報告しています。私のアプリでの漏れがどこで発生しているのか分かりません。 – indragie

+0

は、私はまた、これらのmalloc持っている:私は私のアプリを起動したときにXcodeのデバッガコンソールでfree_garbageエラーを: のMyApp(9874,0xb0103000)はmalloc:free_garbage:ガベージPTR = 0x101bfb0を、非ゼロの参照カウント= 1 は10のようにありました私が起動するたびに、それぞれ異なるアドレスコード(例えば、0x101bfb0)を付けてください。 – indragie

+1

アクセス権があれば、Snow Leopardを使って開発してください。メモリ分析ツール(GCと非メモリ)は、数十倍も優れています。 – bbum

2

AnalysisToolを通して、あなたのプロジェクトを実行してみて、それが見つけたものを見、それを電子メールで送信することができます。基本的にClang Static AnalyzerのGUIフロントエンドです。それはあなたのコードを実行し、多くの他のものの中で、漏れや悪いリリースなどのエラーを見つけます。それはあなたが間違っていた場所をよりよく理解するのを手助けするために段階的な方法でそれらをあなたに提示します。

これは素晴らしいツールです。

+1

+1私はいつもクラングスタティックアナライザを使用しています –

+0

このツールはInstrumentsよりはるかに優れています。私が修正できるものを見てみましょう:) – indragie

+0

AnalysisToolで報告されたすべてのものが修正され、Instrumentsはまだ多くのメモリリークを報告しています – indragie

関連する問題