0

我有一个游戏循环,我把它放在另一个循环中,如下所示:

 for (int i = 1; i <= 10000; i++)
 {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    Game *game = [[Game alloc] init];
    while ([game isActive])
       [game nextRound];
    [game release];

    [pool release]; 
 }

但我在活动监视器中注意到实际使用的内存无限增长,当应用程序达到大约 1GB 内存时最终崩溃。Instruments 没有报告任何泄漏。clang 静态分析器也没有报告泄漏。

我的问题是:

  1. 仪器是否总能发现所有内存泄漏?
  2. 内存无限增加还有其他原因吗?

编辑:

正如@Phillips 所指出的,原因是僵尸标志!关闭后,内存占用如预期。

4

2 回答 2

2

Instruments 也可以用来查看内存分配。当您的记忆增长时,请尝试查看活动对象的数量,看看哪些东西仍然处于活动状态。

这不一定是导致内存增长的泄漏。例如,如果您在此期间创建了一些nextRound保留对象的Game对象,那么在您发布的代码中释放它可能不会导致dealloc.

于 2012-11-02T20:29:42.757 回答
2

你有一个很大的while循环,里面没有自动释放池。尝试

while ([game isActive]) {
   NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
   [game nextRound];
   [pool release];
}
于 2012-11-02T20:24:53.070 回答