1

このコードで NSAutoreleasePool がリークしている理由を誰か教えてください。リークをチェックするために計測器を使用していますが、このコードはどういうわけかリークしています。誰でも私を正しい方向に導くことができますか?他の場所でもまったく同じコードを使用していますが、正常に動作しています。

ASIHTTPRequest *request = [[ASIHTTPRequest alloc] initWithURL:self.url];
 [request setDelegate:self];

 NSOperationQueue *queue = self.downloadQueue;
 [queue addOperation:request];
 [request release];
4

2 に答える 2

2

そのコードの周りに NSAutoreleasePool を作成すると、それはなくなるはずです。これは通常、このコードがメイン スレッドで実行されていない場合に発生します。

NSAutoreleasePool* pool = [NSAutoreleasePool new];
// Your code goes here
[pool drain];

また、NSAutoreleasePool の new/drain ブロック内でループしている場合は、ドレインに到達するまでリークしているように見えることに注意してください。この結果、ループ内であまりにも多くのメモリを割り当てていると、アプリでメモリ不足が発生する可能性があります。その場合、ループを通過するたびに 2 番目の NSAutoreleasePool を作成してドレインする必要があるかもしれません (または、オーバーヘッドの一部を回避するために、ループを n 回ごとに通過する可能性があります)。

于 2011-01-04T18:48:08.643 に答える
1

このコードをセカンダリ スレッドで実行していますか? もしそうなら、エントリー時に自動解放プールをセットアップしましたか?

于 2011-01-04T18:42:20.577 に答える