仪器中的NSAutoreleasePool泄漏

时间:2011-11-20 22:51:46

标签: iphone objective-c nsautoreleasepool xcode-instruments

如果以前曾经问过这个问题,我很抱歉,但我没有找到一个好的答案。

当我运行仪器时,我在代码中的这一行得到泄漏,而不是在主要的:

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

我一直在四处寻找,并在某处读到它可能是一个错误。有人可以帮助我并分享一下这个吗?

我确实注意到我的名字也是“游泳池”,也是主要的。

2 个答案:

答案 0 :(得分:0)

这个名字并不重要;整个代码库中可能有数百个名为pool的变量。重要的是范围。

通常情况下,您会看到:

- someMethod
{
     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
     ... do stuff ...
     id something = [anObject retain];
     [pool drain];
     return [something autorelease];
 }

即。你的游泳池被排干了吗?

(iOS上存在drain;请参阅the documentation。但是,在所有情况下,最好使用@autoreleasepool{ ... };它适用于ARC和MRR。)

答案 1 :(得分:0)

我也有这个问题,第一天我第一个学习如何编码的问题!

我所做的就是彻底删除整行,以:

开头
  

NSAutoreleasepool * pool = [[NSAutoreleasepool alloc] init];

将其替换为:

  

@autoreleasepool {

然后我删除了程序的底部:

  

[pool release];

然后用弯曲的括号关闭。

我不知道它为什么会起作用,我的第一天还记得,但它从示例书中运行我的程序。