任何人都可以告诉我为什么NSAutoreleasePool泄露在此代码中。我正在使用仪器来检查泄漏和这段代码以某种方式泄露。任何人都可以引导我走向正确的方向。我在其他地方有完全相同的代码&它运行良好。
ASIHTTPRequest *request = [[ASIHTTPRequest alloc] initWithURL:self.url];
[request setDelegate:self];
NSOperationQueue *queue = self.downloadQueue;
[queue addOperation:request];
[request release];
答案 0 :(得分:2)
如果围绕该代码创建NSAutoreleasePool,它应该消失。如果此代码未在主线程上运行,通常会发生这种情况。
NSAutoreleasePool* pool = [NSAutoreleasePool new];
// Your code goes here
[pool drain];
另外,请注意,如果您在NSAutoreleasePool new / drain块内循环,您将看到泄漏,直到您到达排水管。这样做的结果是,如果你在循环中分配太多内存,你的应用程序仍然会耗尽内存。在这种情况下,您可能需要每次通过循环创建并排出第二个NSAutoreleasePool(或者可能每隔n次循环一次以避免一些开销)。
答案 1 :(得分:1)
您是否在辅助线程上运行此代码?如果是这样,你在进入时设置了自动释放池吗?