使用XCode Instruments解释iPhone开发的内存警告的新功能,需要指导

时间:2012-06-12 16:47:54

标签: iphone ios memory-management cocos2d-iphone xcode-instruments

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

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

我附上了ObjectAllocation工具输出instruments output的屏幕截图。即使我缩放过滤器,我也无法过滤ObjectSummary see this screenshot中的数据。

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

大蓝峰正好在加载时但应用程序冻结然后只在一段时间后崩溃,从图中我看到内存使用量(蓝色条)已经下降..所以我不安静得到那个。此外,当我尝试使用泄漏仪器时,应用程序崩溃..

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

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

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

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

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

Activity Monitor

非常感谢!

1 个答案:

答案 0 :(得分:1)

如果要查找泄漏,请使用泄漏仪器而不是分配。要了解目前使用多少内存,请使用ActivityMonitor。

如果您在cocos2d中遇到内存问题,可以尝试清除缓存。在cocos2d中,您可以清除CCTextureCacheCCSpriteFrameCacheCCAnimationCache。它将释放未使用的纹理和帧。

如果要检查是否已从内存中删除所有不必要的纹理,可以将断点放到CCTextureCache类并调用,例如sharedTextureCache,然后查看textures_ dictionary的内容。或者在此类中添加一些方法,以便能够转储当前的缓存状态。