我正在用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。 (我也知道这不是正确的方法而我错过了其他的东西)
答案 0 :(得分:3)
首先,您的代码可能会崩溃到某个地方(除非您遗漏了一些代码):CCSprite::create
会返回自动释放的CCSprite
,这意味着您不需要.release()
1}}它(如果你不是.retain()
它,它将在不久之后被删除。)
对于您的问题:CCSprite
需要CCTexture
才能正常工作(您的图片已加载到内存中)。但是CCSprite
并不拥有CCTexture
; CCTexture
由CCTextureCache
管理。
CCTextureCache
在CCTexture
不再使用它时不会直接发布CCSprite
:相反,它会保留CCTexture
以供将来使用(因为加载{ {1}}很贵)并且只有在没有足够的内存时才会释放CCTexture
,或者你强制它执行此操作,
CCTexture
简短的回答是:除非你有真正的内存问题(由于内存不足导致游戏崩溃),否则你不应该担心使用的内存。游戏应该使用大量内存。