我有一个游戏循环,我把它放在另一个循环中:
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的内存时,应用程序最终会崩溃。仪器没有报告任何泄漏。 clang静态分析仪也没有报告泄漏。
我的问题是:
修改
正如@Phillips指出的那样,原因是僵尸旗帜!关闭后,内存占用量与预期一致。
答案 0 :(得分:2)
你有一个很大的while循环,里面没有自动释放池。尝试
while ([game isActive]) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[game nextRound];
[pool release];
}
答案 1 :(得分:2)
仪器也可用于查看内存分配。尝试在内存增长时查看活动对象的数量,以查看哪些内容仍处于活动状态。
这不一定是泄漏导致记忆增长。例如,如果您在nextRound
期间创建了一些保留Game
对象的对象,则在您发布的代码中发布该对象可能不会产生dealloc
。