0

我正在开发一款 iPhone 游戏,它会收到我没有足够经验来解释的内存警告。我一直在看一些 iTunesU 教程,但我仍然不是很擅长这个..

我在运行游戏时收到了各种内存泄漏,我想了解如何正确解释 Instruments 中的堆栈跟踪显示。

我附上了 ObjectAllocation 工具输出的屏幕截图仪器输出 。即使我缩放过滤器,我也无法过滤 ObjectSummary 中的数据看到这个截图

当初始化 GameScene 并加载所有数据(ParallaxBackground、CCSpriteBatchNode)并创建 Sprite 和子弹帧(在 spriteFrames 的 CCArray 中)时,内存使用量的峰值发生在1中。

蓝色的大峰值只是在加载时,但应用程序冻结,然后在一段时间后崩溃,从图表中我看到内存使用量(蓝色条)已经下降..所以我不安静地明白这一点。此外,每当我尝试使用泄漏工具时,应用程序就会崩溃..

我知道对于有经验的人来说这是一个非常愚蠢的问题,但我只需要一些额外的帮助才能开始使用这个工具集。

我认为内存问题是由于我在精灵缓存类中分配的精灵造成的,但我对此不确定,因此想使用 Instruments 对此进行调查,但无法找出如何查看导致内存警告的对象和如何访问堆栈跟踪..

PS:我在第 4 代 iPod 上运行,我使用 Cocos2D 作为库

编辑:我也不明白为什么如果 Live Bytes 只有 1.01 MB,应用程序会崩溃,为什么我仍然会收到内存警告(请参阅黑旗)。是由于某些指针引用了某个空变量还是由于过多的内存分配?1.01 MB 对我来说似乎并不多..

编辑 2:按照 Marion 的建议,我使用了 Activity Monitor 并意识到有效的实际内存使用量为 55.39 MB。我误解了“实时字节”这个词。我将尝试进一步深入研究这一点,并且暂时不接受这个问题,以便让其他人做出贡献。如果我在一两天内没有任何其他答案,我会将当前答案标记为已接受。谢谢!

活动监视器

非常感谢!

4

1 回答 1

1

如果要查找泄漏,请使用 Leaks 工具而不是 Allocations。要了解当前使用了多少内存,请使用 ActivityMonitor。

如果你在 cocos2d 中会有内存问题,你可以尝试清除缓存。在 cocos2d 中你可以清除CCTextureCache, CCSpriteFrameCache, CCAnimationCache. 它将释放未使用的纹理和帧。

如果您想检查是否所有不必要的纹理都从内存中删除,您可以在CCTextureCache类中放置断点并调用,例如,sharedTextureCache查看 throw textures_ 字典的内容。或者向这个类添加一些方法,以便能够转储缓存的当前状态。

于 2012-06-12T17:00:03.840 回答