我正在使用 Cocos2D for iOS 开发游戏。
有一些像菜单之类的场景和一个主要的游戏场景。在主场景中只有三个动态对象。这些对象周期性地互相射击(直到这些对象被杀死或移出场景)。
现在的问题是:游戏不断消耗内存。我想找出我做错了什么。
没有像过度保留的物体这样的明显泄漏。场景被dealloc
编辑,对象被从父母身上移除并被清理,动画被停止等等。
无论如何,记忆一直在某个地方。我正在使用以下代码
+ (void) reportMemory
{
struct task_basic_info info;
mach_msg_type_number_t size = sizeof(info);
kern_return_t kerr = task_info(mach_task_self(),
TASK_BASIC_INFO,
(task_info_t)&info,
&size);
if (kerr == KERN_SUCCESS)
NSLog(@"Memory in use (in Kbytes): %f", info.resident_size / 1024.0);
else
NSLog(@"Error with task_info(): %s", mach_error_string(kerr));
}
找出每个场景开始时消耗了多少内存。并且报告的数字总是大于前一个。
我尝试使用分配分析器,但老实说,我无法找出任何有用的东西。我看到总生存字节基本相同,但进程不断分配和释放一些东西。
你建议我看什么?基本上,我正在寻求有关如何在我的情况下调试内存操作的建议。
编辑(对我有什么帮助):
原来我打开了 NSZombieEnabled。基本上,这是内存消耗不断增加的主要因素。可以在@coneybeare 答案中找到一些有用的信息和提示
第二个最有用的事情是按照@Jack 的建议使用 Instruments (Leaks and Allocations)。它帮助我找到了几个微妙的漏洞。