2012-01-13 4 views
1

私が理解していない私の目的のCコードでメモリリークが発生しています。Objective-C:これはなぜメモリリークですか?

AnalyzeBpm *analyzer = [[AnalyzeBpm alloc] init]; 

while(sample != NULL) 
{ 
//do something with analyzer 
} 

[analyzer release]; 

私は楽器を通じて、このコードを実行すると、私は(百倍のカップルである)BPMを分析割り当てるリーク毎回取得:私は数回呼び出されるメソッドで、このコードを持っています。私はAnalyzeBpmクラスを調べました。そのクラスに割り当てられているものはすべて解放または割り当て解除されます。では、なぜこのコードはメモリリークを引き起こしていますか?

+0

"do something" while()ブロックに "analyzer"を保持しませんか? –

+0

ループ内の「アナライザ」はどうしますか?ここにあるスニペットは漏れにつながりません。また、iOSシミュレーターでこれを実行していますか?これは、デバイスに存在しないいくつかの余分なリークが表示されることがあるためです。 –

+0

私はこれを言うのは嫌ですが、あなたはAnalyzeBpmクラス内の何かを見落としているかもしれません。静的なAnalyzerツールをコード上で実行し、何かが出てくるかどうか確認してください。 – MechEthan

答えて

5

Instrumentsがリークを特定すると、リークを引き起こすコード行ではなく、リークを割り当てるコード行が表示されます。

何かが何かを保持していますanalyzer解放せずに。あなたはアンバランスなretainを見つける必要があります。それはAnalyzeBpmクラスにある場合とそうでない場合があります。

3

あなたのalloc-initとreleaseはバランスが取れていますので、whileループの中に何かがある必要があります。

関連する問題