0

如果之前有人问过这个问题,我深表歉意,但我还没有找到好的答案。

当我运行仪器时,我在代码中的这一行出现泄漏,而不是在 main 中:

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

我一直在环顾四周并在某个地方读到它可能是一个错误。有人可以帮我分享一下吗?

我确实注意到我在 main 中也有相同的名称“pool”。

4

2 回答 2

0

名字无关紧要;pool整个代码库中可能有数百个变量。重要的是范围。

通常,您会看到:

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

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

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

于 2011-11-20T22:58:50.550 回答
0

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

我所做的只是彻底删除从以下内容开始的整行:

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

将其替换为:

@autoreleasepool {

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

[池释放];

然后用波浪形的括号关闭。

我不知道它为什么起作用,我记得我的第一天,但​​它可以很好地运行示例书中的程序。

于 2011-11-24T16:00:34.323 回答