Cocos2dx(1) 容器 CCArray/CCDictionary
Cocos2dx 容器
 Cocos2d-x引擎为我们提供了CCArray、 CCDictionary等Objective-C风格的容器。对C++标准库比较熟悉的读者可能疑惑,开发过程中为什么不直接使用 vector 等标准库已经提供的高效容器呢? 
  使用 Cocos2d-x 容器的一个重要原因在于 Cocos2d-x 的内存管理。一般来说,被存入容器的对象在移除之前都应该保证是有效的,回顾一下引用计数的管理原则,对象的存入和移除必须对应一组 retain()和release()或者对应 autorelease()。直接使用 STL 容器,开发者势必进行烦琐重复的内存管理操作,而 Cocos2d-x 容器对这一过程进行了封装,保证了容器对对象的存取过程总是符合引用计数的内存管理原则。 
  按照 Cocos2d-x 容器的内存管理要求,存入容器的对象必须是 CCObject 或其派生类。同时,Cocos2d-x 的容器本身也是CCObject 的派生类,当容器被释放时,它保存的所有元素都会被释放一次引用。以下代码节选自线性表容器 CCArray 的定义,CCArray 的代码位于引擎目录下的"cocos2dx\cocoa\CCArray.h(.cpp)"文件中:
class CC_DLL CCArray : public CCObject { public: ~CCArray(); ... bool initWithObjects(CCObject* pObject, ...); ... };
 此外,对于跨语言移植游戏(如从 Objective-C 移植到C++)的开发者而言,把原游戏中大量使用的容器全部替换为 STL 库容器是一个极富挑战性的任务。容器存在的意义不仅仅局限于内存管理方面,因此我们应该尽量采用 Cocos2d-x 提供的容器类。
 
                     
                    
                 
                    
                 
 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号