欢迎转载:http://blog.csdn.net/fylz1125/article/details/8519609
其实内存自动回收不是什么新鲜的概念,Java的垃圾回收,Objective-C的自动回收等都是类似的概念。
cocos2d-x是C++的实现,那么其内存管理也是遵循C++的规则,谁创建的谁来维护。
为了保持跟cocos2d引擎的一致,也为了降低其学习难度,cocos2d-x引入了内存自动释放机制,其实就是引用计数和自动释放池。
看官方的类图cocos2d-x类图可以知道,CCObject是所有类的基类。自动释放机制就是在这里实现的。看下其定义:
- classCC_DLLCCObject:publicCCCopying
- {
- public:
- //objectid,CCScriptSupportneedpublicm_uID
- unsignedintm_uID;
- //Luareferenceid
- intm_nLuaID;
- protected:
- //countofreferences
- unsignedintm_uReference;
- //countofautorelease
- intm_uAutoReleaseCount;
- CCObject(void);
- virtual~CCObject(void);
- voidrelease(void);
- voidretain(void);
- CCObject*autorelease(void);
- CCObject*copy(void);
- boolisSingleReference(void);
- intretainCount(void);
- virtualboolisEqual(constCCObject*pObject);
- virtualvoidupdate(floatdt){CC_UNUSED_PARAM(dt);};
- friendclassCCAutoreleasePool;
- };
其中有个变量,m_uReference就是引用计数器。
关键函数