を漏らす:私はindexText
にcomponentsSeparatedByString:
を行っていますが、私は、メモリのかなりをリークし、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でメモリ使用量を見ています。機器は漏れを検出しません。リークはちょうど錯覚、シミュレータの特異性ですか?
ところで(質問には関係ありません):if(indexText == nil)[indexText release]は意味をなさない。初期化子がnilを返すと、オブジェクトの割り当てが解除されます。何も解放する必要はありません。そして、実際には、解放したいオブジェクトへのポインタを取得しないので、このメッセージを送信することもできませんでした。なぜなら、それはnil(0x0)ですからです。 –
さて、それは理にかなっています。私は '[NSString alloc]'を呼んで以来、私はそれを割り当てなくてはならないと思っていました。それをクリアしてくれてありがとう。 – denizen