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 块内循环,您将出现泄漏,直到您碰到排水管。这样做的结果是,如果您在循环内分配了太多内存,您的应用程序仍然可能会耗尽内存。在这种情况下,您可能需要在每次循环中创建和排出第二个 NSAutoreleasePool (或者可能每第 n 次通过循环以避免一些开销)。

于 2011-01-04T18:48:08.643 回答
1

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

于 2011-01-04T18:42:20.577 回答