在使用cocos2d-iphone
的游戏中偶尔会出现EXC_BAD_ACCESS
错误。在实际需要频繁释放大量内存的应用程序中长时间使用NSZombies
当它发生时,Xcode会那样做的这些:
- 显示我的main.m文件,没有堆栈跟踪等
- 给我看在
cocos2d-iphone
的框架的一部分,处理相关的触摸到CCMenu
。这当然暗示我是我的CCMenu
实例之一是什么导致了这个问题 - 但是,由于某种原因,我无法找到哪一个,因为回溯似乎是,仅限于框架的这个区域:基本上,回溯不会显示我的错误,因为它不包含我自己的代码,只有cocos2d-iphone
- 我很确定它是我的代码是什么导致了这个问题。
运气不好,我决定试试这个NSZombie
的东西。我去了方案菜单并检查了僵尸部分。
从我读过的内容看,它所做的不是发布任何东西。这样它可以告诉我什么我的对象是我试图访问时,我不应该有。
这听起来像一个很好的计划。但它让我担心它永远不会释放内存。我的应用程序是一款游戏,它会加载大量的纹理等,实际上,每次访问新地图时都需要释放大量纹理。如果我的应用程序不会发布任何这些内容,我相信它在玩了几分钟后会崩溃,因为它是一个非常重要的游戏。
现在,你可以说这不是什么大不了的事情,因为我所要做的就是找到错误,修复它,并禁用僵尸并称它为一天 - 几分钟就应该足够了......
...但不幸的是,我对如何重现这个错误没有多少想法。事实上,我花了数小时试图重现它。我唯一的领先是它可能与我的游戏中的一个CCMenu
实例有关,但我的游戏几乎每个方面都是CCMenu
实例。
因此,我想长时间启用僵尸,同时尝试重现错误,这可能是不可能的,因为我的应用很可能因为没有释放任何内存而崩溃。我该怎么办?
在模拟器(调试)模式下保持僵尸活着应该没问题。我试过的是我的iOS音频记录和播放应用程序,应用程序没有崩溃,至少达到2 GB的内存使用量(使用NSZombieEnabled)。事实上,我在'调试'模式下保持这个标志没有任何这样的问题。 – Ashok