Cocos2d-x中的数组类CCArray深入分析
2015-04-11 20:09
204 查看
前面的博文中我们提到了一个词典类CCDictionary,它和数组类CCArray共称Cocos2d-x两大常用数据结构,因为在项目中数组类CCArray我们使用的实在是太多了,因此这里补充一篇关于CCArray深入分析的博文,其中提到了一个很多新手可能没有使用过的类ccCArray类,CCArray内部其实都是通过调用该类实现的,值得我们注意。
CCArray是从cocos2d中移植过来的,类似于Apple的NSMutableArray,但是比NSMutableArray更为的好用。要注意的是虽然CCArray和CCDictionary可以管理cocos2d-x中绝大多数的类,但是仍然无法替代STL库,STL库更为强有力。
所以,每次CCArray在插入数据时检测到空间不足会增加一倍空间,再进行检测,直到空间满足分配为止。
(1)它使用的是C接口,所以它不有Objective-C消息开销。
(2)它假定你知道你在做什么,所以它不花时间在安全检查上(如边界溢出,空间需求等)。
(3)在比较上使用了指针而不是isEqual。
除了CCArray,我们还看到了ccCArray,CCArray基本上都是调用了ccCArray的函数,为什么要分为2种?
仔细看一下CCArray是继承于CCObject,所以CCArray是用于处理cocos2d-x对象的,内存管理上也有cocos2d-x的autorelease等诸多特性。而ccCArray可以直接操作标准的C数据结构和类型。
CCArray是从cocos2d中移植过来的,类似于Apple的NSMutableArray,但是比NSMutableArray更为的好用。要注意的是虽然CCArray和CCDictionary可以管理cocos2d-x中绝大多数的类,但是仍然无法替代STL库,STL库更为强有力。
1.API
先看一下CCArray可以帮我们做什么。
1.1.创建
1.2.添加
1.3.删除
1.4.操作元素
1.5.操作array内容
2.remove和fastremove
从1.3可以看出删除有两种方式,普通删除和快速删除,它们有什么区别呢?
2.1.普通删除
2.2.快速删除
2.3.总结
如果有array={0,1,2,3,4,5},如果要删除3,使用普通删除得到的结果{0,1,2,4,5},使用快速删除得到的结果是{0,1,2,5,4}。可以看出快速删除的效率比普通删除效率高,就差在移动元素的时间复杂度上。3.内存分配
3.1.容量和个数
CCArray中容量和个数并不是同一个概念。个数<=容量。从添加元素的源码中可以看到在添加之前会先进行空间分配,所以它是一个动态分配内存的过程。如下3.2.判等
判断2个CCArray是否相等使用isEqualToArray(),判断相等的条件是CCArray中的每个元素相等即可,与CCArray的容量无关。4.效率
比起NSMutableArray,CCArray效率能高出10%左右,原因有三:(1)它使用的是C接口,所以它不有Objective-C消息开销。
(2)它假定你知道你在做什么,所以它不花时间在安全检查上(如边界溢出,空间需求等)。
(3)在比较上使用了指针而不是isEqual。
除了CCArray,我们还看到了ccCArray,CCArray基本上都是调用了ccCArray的函数,为什么要分为2种?
仔细看一下CCArray是继承于CCObject,所以CCArray是用于处理cocos2d-x对象的,内存管理上也有cocos2d-x的autorelease等诸多特性。而ccCArray可以直接操作标准的C数据结构和类型。
5.CCARRAY_FOREACH和CCARRAY_FOREACH_REVERSE
宏定义,用于正向遍历和反向遍历CCArray元素6.示例
CCArray的使用示例在/article/1342498.html此文中有比较典型的应用,这里就不再详述。7.注意
一般来说,CCArray不会被add到其他类,所以它的引用计数是1,而且被设置为自动释放。所以创建CCArray对象时要记得调用retain,而且在析构的时候也要调用release来释放内存。真心想吐槽。。。相关文章推荐
- Cocos2d-x中的数组类CCArray深入分析
- Cocos2d-x中的数组类CCArray深入分析
- Cocos2d-x-html5 之 HelloWorld 深入分析与调试
- Cocos2d-x2.0 之 ClickAndMoveTest “谈不上深入”的分析.
- Cocos2d-x 的“HelloLua” 深入分析
- Cocos2d-x 的“HelloWorld” 深入分析
- 【游戏引擎】深入分析Cocos2d-x 2.0中的“纹理”(一)
- cocos2d-x 2.2.3 ccArray简单分析
- 【cocos2d-x 手机游戏开发】Cocos2d-x 2.0 渲染到纹理深入分析
- Cocos2d-x-html5之HelloWorld深入分析与调试
- Cocos2d-x2.0 之 ClickAndMoveTest “谈不上深入”的分析.
- Cocos2d-x Auto-batching 浅浅的”深入分析”
- 深入分析MFC中的CArray类(转载)
- 深入分析基类定义 --以Cocos2d-x游戏开发之旅为例 课本第5章 little runner游戏分析之1
- C++ 数组做参数 深入分析
- Cocos2d-x2.1.1-ClippingNodeTest深入分析(二)
- cocos2d-x 网格动画深入分析
- Cocos2d-x 2.0 序列帧动画 深入分析
- Cocos2d-x之CCImage深入分析
- Cocos2d-x 2.0 渲染到纹理深入分析