NSAutoReleasePool泄漏

时间:2011-01-04 18:39:00

标签: iphone ipad ios asihttprequest nsautoreleasepool

任何人都可以告诉我为什么NSAutoreleasePool泄露在此代码中。我正在使用仪器来检查泄漏和这段代码以某种方式泄露。任何人都可以引导我走向正确的方向。我在其他地方有完全相同的代码&它运行良好。

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

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

2 个答案:

答案 0 :(得分:2)

如果围绕该代码创建NSAutoreleasePool,它应该消失。如果此代码未在主线程上运行,通常会发生这种情况。

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

另外,请注意,如果您在NSAutoreleasePool new / drain块内循环,您将看到泄漏,直到您到达排水管。这样做的结果是,如果你在循环中分配太多内存,你的应用程序仍然会耗尽内存。在这种情况下,您可能需要每次通过循环创建并排出第二个NSAutoreleasePool(或者可能每隔n次循环一次以避免一些开销)。

答案 1 :(得分:1)

您是否在辅助线程上运行此代码?如果是这样,你在进入时设置了自动释放池吗?