cocos2d-x的所有对象都是基于CCObject派生的,该对象接口如下:
class CC_DLL CCObject : public CCCopying
{
public:
// object id, CCScriptSupport need public m_uID
unsigned int m_uID;
// Lua reference id
int m_nLuaID;
protected:
// count of references
unsigned int m_uReference;
// count of autorelease
unsigned int m_uAutoReleaseCount;
public:
CCObject(void);
virtual ~CCObject(void);
void release(void);
void retain(void);
CCObject* autorelease(void);
CCObject* copy(void);
bool isSingleReference(void);
unsigned int retainCount(void);
virtual bool isEqual(const CCObject* pObject);
virtual void update(float dt) {CC_UNUSED_PARAM(dt);};
friend class CCAutoreleasePool;
};
显而易见是通过引用计数来管理对象的生存周期的。
cocos2d-x还仿着ios的autorelease pool实现了一个自动释放池,不过使用方法稍有不同,CCAutoreleasePool每帧都会释放一次,即引用计数为1的对象autorelease后会在下一帧自动释放,cocos2d-x中的各种静态create方法生成的对象都是自动释放的,所以如果需要长期维护生命周期,必须先retain后使用。