2010-11-28 9 views
0

を漏らす:私はindexTextcomponentsSeparatedByString:を行っていますが、私は、メモリのかなりをリークし、packageListが自動解放されたという事実にもかかわらず(証明- [NSStringのcomponentsSeparatedByString:]私は次のコードを持っている

NSString *indexText = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
if (indexText==nil) { 
    [indexText release]; 
    indexText = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; 
} 
[data release]; 
NSAutoreleasePool *innerPool = [NSAutoreleasePool new]; 
NSArray *packageList = [indexText componentsSeparatedByString:@"\n\n"]; //if commented out, there's no leak 
[indexText release]; 
[innerPool drain]; 

を私がもう一度それを解放しようとすると、コードがクラッシュするという事実によって)。 componentsSeparatedByString:という行をコメントアウトすると、リークが消えます。

ところで、iPhone Simulatorを実行している間、私はActivity Monitorでメモリ使用量を見ています。機器は漏れを検出しません。リークはちょうど錯覚、シミュレータの特異性ですか?

+1

ところで(質問には関係ありません):if(indexText == nil)[indexText release]は意味をなさない。初期化子がnilを返すと、オブジェクトの割り当てが解除されます。何も解放する必要はありません。そして、実際には、解放したいオブジェクトへのポインタを取得しないので、このメッセージを送信することもできませんでした。なぜなら、それはnil(0x0)ですからです。 –

+0

さて、それは理にかなっています。私は '[NSString alloc]'を呼んで以来、私はそれを割り当てなくてはならないと思っていました。それをクリアしてくれてありがとう。 – denizen

答えて

7

実際にメモリがリークする可能性はありません。componentsSeperatedByString:は、オートリース済みNSArrayを返します。

これらのことについては、

+0

それは私が信じると思うことです。アクティビティモニタに表示されるメモリ使用量は、アプリケーションの実際のメモリ要件を表していませんか? – denizen

+0

@denizen、あなたはそれを持っています。 –

関連する問題