【问题标题】:cocos2d using gobs of memorycocos2d 使用大量内存
【发布时间】:2012-01-13 11:14:10
【问题描述】:

在我使用 cocos2d 的游戏中,我遇到了内存不足的最糟糕的情况。

我有 4 个场景。当我使用

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

我尝试过 push/pop,但它使问题恶化了大约 10 倍。

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

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

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

【问题讨论】:

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


    【解决方案1】:

    好像cocos2d有some issues with ARC that got fixed only recently

    我不知道这是否与您的内存问题有关,但您可以检查您使用的是哪个 cocos2d 版本。

    不管怎样,cocos2d 似乎只能从 2.0 版本开始完全支持 ARC。因此,最好不要使用 ARC,而是通过正确使用 release 来正确管理内存。据我所知,cocos2d没有内存问题,应该可以完成。

    【讨论】:

      【解决方案2】:

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

      一种有助于节省内存的方法,尤其是在过渡期间,是过渡到加载场景,然后从那里过渡到您想要的实际场景。这是因为在正常过渡期间,两个场景同时占用内存至少 1 帧,而廉价的加载场景会取而代之,从而减少在两个激烈场景之间过渡时经常发生的可怕的内存峰值。

      【讨论】:

        猜你喜欢
        • 2012-06-19
        • 2014-01-16
        • 2023-03-24
        • 1970-01-01
        • 1970-01-01
        • 2012-02-01
        • 2011-11-06
        • 2010-11-13
        • 2014-11-02
        相关资源
        最近更新 更多