最近有用到CCArray,看到个不错的文章,就转载一下,一方便日后查看:
原文地址:http://blog.youkuaiyun.com/jnanxu/article/details/14124367
先来认识下CCArray的属性:
- /** 创建一个数组 */
- static CCArray* create();
- /** 通过一些对象创建一个数组 */
- static CCArray* create(CCObject* pObject, ...);
- /** 创建一个数组,并将对象放进去 */
- static CCArray* createWithObject(CCObject* pObject);
- /** 创建一个数组,设定估计容量 */
- static CCArray* createWithCapacity(unsigned int capacity);
- /** 同一个一个数组创建一个数组 */
- static CCArray* createWithArray(CCArray* otherArray);
- /**
- @brief 通过文件导入一个数组
- @param pFileName 一个*.plist格式的文件
- @return 返回CCArray数组指针
- */
- static CCArray* createWithContentsOfFile(const char* pFileName);
- /*
- @brief 同上, 但是不会调用autorelease, 所以调用之后需要执行release().
- */
- static CCArray* createWithContentsOfFileThreadSafe(const char* pFileName);
- /** 初始化数组 */
- bool init();
- /** 通过一个对象初始化数组 */
- bool initWithObject(CCObject* pObject);
- /** 通过一些对象初始化数组 */
- bool initWithObjects(CCObject* pObject, ...);
- /** 初始化数组,设定估计容量 */
- bool initWithCapacity(unsigned int capacity);
- /** 通过一个数组初始化数组 */
- bool initWithArray(CCArray* otherArray);
- // 查询数组函数
- /** 返回数组元素的数量 */
- unsigned int count() const;
- /** 返回数组的估计容量 */
- unsigned int capacity() const;
- /** 通过对象去获得这个对象在数组中的下标,如果数组中没有这个对象会返回UINT_MAX */
- unsigned int indexOfObject(CCObject* object) const;
- /** 通过一个正确的下标去获得一个元素 */
- CCObject* objectAtIndex(unsigned int index);
- /** 返回最后一个元素 */
- CCObject* lastObject();
- /** 返回一个随机元素 */
- CCObject* randomObject();
- /** 判断数组是否包含该对象 */
- bool containsObject(CCObject* object) const;
- /** 从 1.1 之后,两个数组进行对比 */
- bool isEqualToArray(CCArray* pOtherArray);
- // 添加函数
- /** 添加一个对象 */
- void addObject(CCObject* object);
- /** 添加数组所有元素 */
- void addObjectsFromArray(CCArray* otherArray);
- /** 插入一个对象到一个正确的下标位置 */
- void insertObject(CCObject* object, unsigned int index);
- // 删除函数
- /** 删除最后一个元素 */
- void removeLastObject(bool bReleaseObj = true);
- /** 删掉数组中形参的元素 */
- void removeObject(CCObject* object, bool bReleaseObj = true);
- /** 通过一个正确的下标去删除元素 */
- void removeObjectAtIndex(unsigned int index, bool bReleaseObj = true);
- /** 通过一个数组去删除元素 */
- void removeObjectsInArray(CCArray* otherArray);
- /** 删除所有元素 */
- void removeAllObjects();
- /** 通过一个快速方式去删除元素 */
- //快速方式就是:删除这个元素之后,将最后一个元素填充到删除位置。这样会打乱顺序,慎用
- void fastRemoveObject(CCObject* object);
- /** 通过一个快速方式去删除下标位置的元素 */
- void fastRemoveObjectAtIndex(unsigned int index);
- // 重新安排内容
- /** 交换元素 */
- void exchangeObject(CCObject* object1, CCObject* object2);
- /** 交换制定的两下标的元素 */
- void exchangeObjectAtIndex(unsigned int index1, unsigned int index2);
- /** 用一个对象去替换指定下标的元素 */
- void replaceObjectAtIndex(unsigned int uIndex, CCObject* pObject, bool bReleaseObject = true);
- /** 翻转数组 */
- void reverseObjects();
- /* 缩小数组,让数组占用的内存符合元素的数量 */
- void reduceMemoryFootprint();
下面来介绍CCArrary几个可以用来偷懒的预编译:
- #define CCARRAY_FOREACH(__array__, __object__) //遍历所有元素,后面会举例
- #define CCARRAY_FOREACH_REVERSE(__array__, __object__) //反序遍历元素
- #define CCARRAY_VERIFY_TYPE(__array__, __type__) //判断数组元素是否属于某类对象
- #define arrayMakeObjectsPerformSelector(pArray, func, elementType)//让数组中所有元素去执行某一个函数
- #define arrayMakeObjectsPerformSelectorWithObject(pArray, func, pObject, elementType)//让数组中所有元素去执行某一个函数 ,带参数
举例:
- CCArray* arr = CCArray::create();
- CCObject* pNode;
- CCARRAY_FOREACH(arr,pNode)
- {
- pNode->retainCount();
- //遍历arr数组,让每一个元素执行retainCount()函数
- }
注意,不能通过CCARRAY_FOREACH去遍历删除元素,会删不干净。
原因:http://blog.youkuaiyun.com/lyh66/article/details/9613055
但是可以通过CCARRAY_FOREACH_REVERSE去遍历删除