cocos2d使用记忆的gobs

时间:2011-12-05 18:22:43

标签: iphone ios memory cocos2d-iphone memory-leaks

我在使用cocos2d的游戏中耗尽内存的绝对最差时间。

我有4个场景。当我使用

切换场景时,两个内存消失了
[[CCDirector sharedDirector]replaceScene:sceneWithTransition]

我尝试过推/弹,它使问题大约差10倍。

然而,其中2个场景就像一个病毒。我不能从内存中删除它们的条件。 我正在使用ARC的改动。我希望他们会帮助,但他们没有。

我已经覆盖了清理方法,以确保我摆脱对场景中所有内容的引用。第一个是游戏场景,我可以想象有可能我错过了一些不知何故的东西。然而另一个是设置场景。它有5个部分。他们都被抛出,但场景不会被清除。在转换为ARC之前,应用程序无法使用,因此经常崩溃,当它没有崩溃时,它的内存不足。在ARC之后,它比以前持续了大约4倍,但仍然经常耗尽内存。然而,崩溃几乎不存在。

我想首先,在场景之间切换的正确方法是什么? 其次,在使用arch时如何从内存中删除一些东西,因为object = nil什么都不做。我使用ARC的所有其他程序都像梦一样运行。他们都没有使用cocos2d引擎。自从引入arc之前我没有看到内存错误,直到我犯了将qu​​artz2d游戏转换为cocos2d的错误。我没有回到实际运行的平台的唯一原因是我真的很喜欢可能在cocos中产生的效果,而我根本无法在石英中工作。

2 个答案:

答案 0 :(得分:1)

似乎cocos2d有some issues with ARC that got fixed only recently

我不知道这是否与您的内存问题有关,但您可能会检查您正在使用的cocos2d版本。

无论如何,似乎cocos2d将仅从版本2.0完全支持ARC。因此,最好不要使用ARC并通过正确使用release来正确管理内存。据我所知,cocos2d没有内存问题,所以你应该能够完成它。

答案 1 :(得分:1)

从我理解的推送/弹出使用“堆栈”模型,因此当推送或弹出新场景时,内存不会被删除,这可以解释为什么使用此方法时会变得更糟。

一种可以帮助节省内存的方法,特别是在转换过程中,是转换到加载场景,然后从那里过渡到您想要的实际场景。这是因为在正常转换期间,两个场景同时占用内存至少1帧,而廉价的加载场景将取代它们的每个位置,减少在两个激烈场景之间转换时经常发生的可怕的内存峰值。