memory management in cocos2d x - le duy vu
DESCRIPTION
TRANSCRIPT
MEMORY MANAGEMENT IN COCOS2D-X
Reference Count and AutoReleasePool
Texture Cache
Optimize memory in game.
REFERENCE COUNT IN COCOS2D-X
Reference Count : is an old approach of memory management in C/C++ projects.
Example :
AUTORELEASEPOOL AutoReleasePool:
CCAutoreleasePool can not be NESTED.
CCAutoreleasePool cannot be used in multi-thread.
USE AUTORELEASE POOL A *a = new A(); a->autorelease() . From here you must not interested
release/delete this object . Autorelease pool will delete/release
object ,but when?
//in init scene m_pNode = CCNode::create();
m_pNode = new CCNode(); m_Node->autorelease();
//1 funciton orther in frame orther
m_pNode->setPosition(ccp(0, 0));
class A { CCNode *m_pNode;
public: // pointer dangling!!
~A() { SAFE_DELETE(m_pNode); }; void setNode(CCNode *pNode) { m_pNode = pNode; };
} What happen if at time call ~A(), pNode
deleted?
class A { CCNode *m_pNode; public:
~A() { SAFE_RELEASE(m_pNode); };// OK now
void setNode(CCNode *pNode) {
m_pNode = pNode; pNode->retain(); };
}
TEXTURE CACHE Textures are cached which can later be
used for drawing.
TEXTTURE CCTextureCache CCSpriteFrameCache
CCSPRITEFRAMECACHE
The CCSpriteFrameCache singleton is a cache of all sprite frames. Using a spritesheet and its associated xml file we can load multiple sprites into the cache. From here we can create CCSprite objects with sprites from the cache.
OPTIMIZE MEMORY IN GAME
Avoid loading PNG/JPG Textures. Load textures from largest to smallest. Use .pvr.czz file format. Use particles.
Avoid loading PNG/JPG Textures :In loading texture size 2M .you have to 4M memory.
Load textures from largest to smallest : If you must load 4 file (4M) and 1
file(16M) If load 4 file(4M) before load file 16 M :
max-memory use : 4 x 4 + 16 x 2 = 48 M.
If load 4 file(4M) after loaded file 16M : max-memory use : 16 + 4 x3 + 4 x 2 = 36 M.