cocos2dx提供的容器有CcArray,CcDiction。cocos2dx既然使用c++语言,为什么不采用stl提高的容器,还要自己去重新实现一套呢。这首先要从cocos2dx的内存管理机制说起,cocos2dx采用引用计数机制,每个对象都维护一个引用计数器,当计数器为0时,该对象就会被自动释放回收。cocos类都继承基类cobject,cobject实现了引用计数器机制,其派生类都有此功能。
对cocos对象的使用,通过retain方法获得引用,使用完成后,通过release方法释放引用,这是一对操作。cocos实现的容器都完成了这个功能,而c++标准stl模板容器没有此功能。所以推荐使用cocos提供的容器类。cocos提供的容器只能放对象指针。
为了方便对象的引用操作,cocos框架提供了很多宏,简化了代码。其中常用的有:
CC_SAFE_DELETE(p) | 使用delete操作符删除一个C++对象p,如果p为NULL,则不进行操作 |
CC_SAFE_DELETE_ARRAY(p) | 使用delete[]操作符删除一个C++数组p,如果p为NULL,则不进行操作 |
CC_SAFE_FREE(p) | 使用free()函数删除p,如果p为NULL,则不进行操作 |
CC_SAFE_RELEASE(p) | 使用release()方法释放Cocos2d-x对象p的一次引用,如果p为NULL,则不进行操作 |
CC_SAFE_RELEASE_NULL(p) | 使用release()方法释放Cocos2d-x对象p的一次引用,再把p赋值为NULL。如果p已经为NULL,则不进行操作 |
CC_SAFE_RETAIN(p) | 使用reatin()方法增加Cocos2d-x对象p的一次引用。如果p为NULL,则不进行操作 |