Cocos2d iphone 如果在Cocos2d iphone中玩了5-6次,游戏会变慢

Cocos2d iphone 如果在Cocos2d iphone中玩了5-6次,游戏会变慢,cocos2d-iphone,Cocos2d Iphone,这是我在游戏中面临的一种新问题。我可以说我已经实现了游戏的所有代码。但我面临着这个问题。事实上,当我玩了5-6次以上的时候,游戏就会变慢,这意味着我们可以感觉到它在变慢。但它的FPS是60,但FPS的波动发生在60到30之间 在我的游戏中,我实现了ARC。我还可以看到,每次场景中出现的对象数量都是相同的 我也用仪器检查了游戏中的内存泄漏,但游戏中没有内存泄漏。我不能显示代码,因为它是机密的 但我无法解决这个问题。我想知道这背后的原因是什么,如何解决这个问题 任何类型的帮助都是有帮助的内存泄漏和放

这是我在游戏中面临的一种新问题。我可以说我已经实现了游戏的所有代码。但我面临着这个问题。事实上,当我玩了5-6次以上的时候,游戏就会变慢,这意味着我们可以感觉到它在变慢。但它的FPS是60,但FPS的波动发生在60到30之间

在我的游戏中,我实现了ARC。我还可以看到,每次场景中出现的对象数量都是相同的

我也用仪器检查了游戏中的内存泄漏,但游戏中没有内存泄漏。我不能显示代码,因为它是机密的

但我无法解决这个问题。我想知道这背后的原因是什么,如何解决这个问题


任何类型的帮助都是有帮助的

内存泄漏和放弃内存是有区别的。ARC有助于消除泄漏,但它仍然允许您在不再需要对象时保留对对象的强引用。这方面的一个例子是保留周期

您可以执行称为Heapshot分析的技术。当游戏结束后不再需要记忆时,它会用仪器向你显示所保留的记忆


这里有一个关于Heapshot的教程

虽然我不使用Apple toys来做这件事,但每次运行我的应用程序时,我都会执行类似heapshot的分析:这一功能内置于我的每个类中,使我能够在程序执行过程中的任何时候准确确定当前分配(而不是解除分配)的实例数。当我在一个项目中添加一个时,每节课都会有一点工作量(比如说大约1分钟),但在项目的整个生命周期中,这是一个救生圈

回到你在评论中的问题,不,我对你的500公里没有任何线索。现在唯一能弄明白这一点的人是你。如果您的游戏有一个逻辑点(如游戏主菜单),您可以在退出应用程序(我指的是硬杀戮)之前返回该点,在该位置,我会在绘制菜单后立即开始执行此操作:

// below code with cocos2d 2.x

NSLog(@"*** before purge ***");
[[CCTextureCache sharedTextureCache] dumpCachedTextureInfo];

[CCAnimationCache purgeSharedAnimationCache];
[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFrames];
[[CCDirector sharedDirector] purgeCachedData];
[self scheduleOnce:@selector(dumpTextures) delay:0.5f]; 

// let the run loop cycle a bit
// to give a chance for auto-release objects to be
// disposed from the pool ... 

-(void) dumpTextures {

    NSLog(@"*** after purge ***");
    [[CCTextureCache sharedTextureCache] dumpCachedTextureInfo];

}

并检查结果。寻找cocos2d仍然为您保留的任何纹理。。。到目前为止,最有可能的记忆猪。我不认为500K的5-6倍会对峰值在140Mb左右的游戏产生多大影响。

我想这是因为复杂的代码和计算。如何消除复杂性???我接受否决票,但至少在评论中留下理由。。所以我可以从中学到一些东西。我想你运气不好,因为你无法向我们描述你在做什么。正如我明确提到的,我不能在这里显示代码,因为它是机密的。所以,如果有人不能恰当地描述,不要求更多的解释,你就放弃投票。很好,我知道了堆栈溢出用户的新事物。弧或无弧,你可以保留对象当你循环你的游戏,例如这些你认为(从功能的观点)处置的对象,仍然持有,即他们没有泄漏。通过运行内存分配配置文件确认这一点,并在模拟器中玩游戏(查看纹理分配的内存)。如果MA是一个平板电脑,你的问题不在于内存。嘿,当我重新启动游戏时,我进行了4-5次Heapshot分析,每次都会得到500 KB左右的非对象,你知道这方面的事情吗,如何解决…是的,Ben,我忘了告诉你thanx,无论如何,thanx对于本教程来说…这对我很有帮助。嘿,我试过你说的了。当我重新启动游戏时,我得到了以下信息:在清除CoCoCoS2D:CCTextureCache dumpDebugInfo:58个纹理之前,为56535 KB(55.21 MB),在清除CCTextureCache dumpDebugInfo:55个纹理之后,为53181 KB(51.94 MB),那么我该怎么办???我是否必须手动删除其他文件?通过删除清除数据,在进入新游戏之前,仍有55个纹理。