Bob*_*sky 1 profiling memory-leaks cocos2d-iphone ios xcode4.2
我正在使用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));
}
Run Code Online (Sandbox Code Playgroud)
找出每次开始场景时消耗的内存量.报告的数字总是比前一个更大.
我试图使用分配探查器,但说实话,我无法弄清楚任何有用的东西.我看到总生存字节基本相同,但是进程不断分配和释放一些东西.
你建议我看一下什么?基本上,我正在寻求如何在我的情况下调试内存操作的建议.
编辑(有什么帮助我):
事实证明我打开了NSZombieEnabled.基本上,它是恒定内存消耗增加的主要因素.一些有用的信息和提示可以在@coneybeare答案中找到
第二个最有用的是使用@Jack建议的仪器(Leaks and Allocations).它帮助我找到了几个微妙的泄漏.
乐器绝对是你的朋友,是一种吃掉记忆的东西然后你就能看到它.
您应该使用的第一件事是泄漏仪器(不是分配仪器),它将通过每隔X秒采样一次内存来显示泄漏.
如果单击特定的已识别泄漏,则可以看到

如果这还不够,通过选择分配工具,左侧有一个标记为Mark Heap的按钮.此按钮每次单击时都会创建堆的快照,并且能够显示确切的差异,以便您能够查看是否存在已分配的内存,并且在两个不应该存在的内存之间永不释放.

有了这些,我总能找到任何与内存相关的问题!
| 归档时间: |
|
| 查看次数: |
2453 次 |
| 最近记录: |