首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有许多场景的Cocos2D项目不能正确释放内存

有许多场景的Cocos2D项目不能正确释放内存
EN

Stack Overflow用户
提问于 2012-02-11 02:35:17
回答 2查看 3.3K关注 0票数 5

我有一个很大的问题,我不太明白为什么会发生。情况就是这样:

  • 在Cocos2D中有一个很棒的项目,有10个场景。每一幕都是一页有着巨大精灵的书。它使用implementation.
  • Every 1.0.2页面在单例类中具有公共对象,通过LayerColor放置公共菜单。FrameFile.
  • At
  • every在PVR.CCZ RGBA4444中是TexturePacker,在iPad内存中,每个spritesheet加载大约16~20 to,
  • ,每一个页面(类)使用CCTransitionTurnPage作为replaceScene,
  • 在每个页面(类)的init方法中,加载每个页面(类)的纹理和iPad onExit方法,卸载纹理和frameFile。我使用了dumpCachedTextureInfo,并说我的纹理加载和卸载从内存完美。当然,
  • 从子对象中删除所有对象。我的所有精灵都是在.h的接口部分声明的公共变量,因为我需要在类的每个方法中访问它们。

事实上,当我开始这个项目的时候,一切看起来都很完美,但是我制作的每一个场景(页面)的记忆都在增加。Page1: 30 54,Page2: 40,3: 54,4: 65.在7或8个场景之后,仪器、Xcode或iPad本身不带任何消息挂起应用程序(除了具有最终低内存警告的仪器)。

为什么每个场景之后都没有内存释放?也许是因为ARC和无超级去合金化变量。为什么纹理看起来完全卸载,但似乎没有卸载,因为内存正在增长,没有控制,直到崩溃?

EN

回答 2

Stack Overflow用户

发布于 2012-03-05 19:08:54

我在记忆保持方面也有类似的问题,在仪器上也没有泄漏。在我将以下内容写入每个场景的.m文件之前,我甚至无法得到-(void) dealloc的调用:

代码语言:javascript
复制
-(void) onExit {
    //unschedule selectors to get dealloc to fire off
    [self unscheduleAllSelectors];
    //remove all textures to free up additional memory. Textures get retained even if the sprite gets released and it doesn't show as a leak. This was my big memory saver
    [[CCTextureCache sharedTextureCache] removeAllTextures];
    [super onExit];
}

在实现这个之后,在调用每个replaceScene:之后,我的内存就被释放了。希望这对你有帮助。

票数 10
EN

Stack Overflow用户

发布于 2013-04-10 09:10:17

经过几个月的工作,我在Cocos2D上学到了最重要的一课。当您将任何CCNode对象放置在CCArray、NSArray或NSDictionary上时,保留值增加1。这意味着必须在CCLayer或CCScene dealloc之前从该对象释放对象。

您必须将数组removeAllObjects或字典发布在- (void)清理上,并且在删除所有对象之后,然后进行超级清理;

同时,on - (void) onExit必须从实例中删除所有调度程序。不仅仅是调度程序本身。记得在任何stopAllActions上使用CCNode。但是,要小心,因为从CCNodes (雪碧或其他什么东西)停止行动必须在清理之前,在任何removeAllObjects之前。

请记住:如果CCLayer或CCScene没有正确地删除,SimpleAudioEngine not也会释放音频。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9237347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档