Cocos2d-x CCSprite内存使用(释放CCSprite)

时间:2014-04-26 16:18:11

标签: c++ memory cocos2d-x

我正在用cocos2dx v2.2.3开发游戏。我做了一个测试,我发现了一些问题如下:

问题:(在Windows中)当我运行游戏并检查TaskManager时,我发现我的游戏占用了大约20MB的内存(平均而言)。

但是在我的游戏Init()的{​​{1}}中添加这些代码后,它会将内存使用量增加到300MB。

Layer

(我自己为这次测试创造了巨大的图片)

我在CCSprite *t; t = CCSprite::create("Character/foo1.png"); //Each picture is about 50MB t->release(); t = CCSprite::create("Character/foo2.png"); t->release(); t = CCSprite::create("Character/foo3.png"); t->release(); t = CCSprite::create("Character/foo4.png"); t->release(); 正在调用时检查了m_uReference。并且t->release();正在变为m_uReference,所以应该删除它!但为什么内存使用率很高?

问题:我想知道如何在一段时间后删除/删除/释放CCSprite?


其他信息/测试:

我发现了一些可能有用的东西。致电0之后到达:

t->release();

但是在CCSprite::~CCSprite(void) { CC_SAFE_RELEASE(m_pobTexture); } 中,CC_SAFE_RELEASE(m_pobTexture);纹理从2减少到1,因此纹理不会被删除。 我做了一个测试并做了这个改变:

m_uReference

RAM恢复到~20MB。 (我也知道这不是正确的方法而我错过了其他的东西)

1 个答案:

答案 0 :(得分:3)

首先,您的代码可能会崩溃到某个地方(除非您遗漏了一些代码):CCSprite::create会返回自动释放的CCSprite,这意味着您不需要.release() 1}}它(如果你不是.retain()它,它将在不久之后被删除。)

对于您的问题:CCSprite需要CCTexture才能正常工作(您的图片已加载到内存中)。但是CCSprite并不拥有CCTexture; CCTextureCCTextureCache管理。

CCTextureCacheCCTexture不再使用它时不会直接发布CCSprite:相反,它会保留CCTexture以供将来使用(因为加载{ {1}}很贵)并且只有在没有足够的内存时才会释放CCTexture,或者你强制它执行此操作,

CCTexture

简短的回答是:除非你有真正的内存问题(由于内存不足导致游戏崩溃),否则你不应该担心使用的内存。游戏应该使用大量内存。

相关问题