加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

什么时候用removeUnusedSpriteFrames和removeUnusedTextures

发布时间:2020-12-14 20:44:33 所属栏目:百科 来源:网络整理
导读:在一个使用cocos2d的项目中,当切换关卡或者说切换layer时,经常需要释放上一个关卡或者layer中使用的图片资源,这个时候需要用到下面两个函数: [CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames]; [CCTextureCache sharedTextureCac

在一个使用cocos2d的项目中,当切换关卡或者说切换layer时,经常需要释放上一个关卡或者layer中使用的图片资源,这个时候需要用到下面两个函数:

[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames];
[CCTextureCache sharedTextureCache] removeUnusedTextures];
注意:一定不要忘了调用CCSpriteFrameCache的removeUnusedSpriteFrames函数,因为每一个 CCSpriteFrame实例都retain了一个CCTexture实例,如果不调用该函数,被retain的CCTexture实例永远得不到释放 (除非强制释放该CCTexture实例)。还有,函数的调用顺序应该时先调用CCSpriteFrameCache的 removeUnusedSpriteFrames函数,再调用CCTextureCache的removeUnusedTextures函数。
一般来说,释放系统资源的简单方法是在每个CCLayer的dealloc函数中调用上述两个函数(如果你在第二个CCLayer的初始化方法中调用这两 个方法是没法真正释放所有资源的,因为replaceScene函数是先初始化第二个scene,再release第一个scene),但是一定记得要在 [super dealloc];函数之后调用,因为CCNode的dealloc函数才是最终释放所有children的地方。
但是,在每个CCLayer的dealloc函数中调用上述两个函数释放资源会出现一个问题,即导致某一小段时间内(第二个scene初始化完毕但是第一 个scene还没被释放的时间段)内存达到一个峰值,有可能会收到内存警告甚至是程序crash。为了避免这种情况,最好是在关卡切花或者说切换 layer时,做一个loadingLayer来过渡。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读