[转]cocos2d-x中的CCArray

最近有用到CCArray,看到个不错的文章,就转载一下,一方便日后查看:

原文地址:http://blog.csdn.net/jnanxu/article/details/14124367

先来认识下CCArray的属性:

  1. /** 创建一个数组 */  
  2. static CCArray* create();  
  3. /** 通过一些对象创建一个数组 */  
  4. static CCArray* create(CCObject* pObject, ...);  
  5. /** 创建一个数组,并将对象放进去 */  
  6. static CCArray* createWithObject(CCObject* pObject);  
  7. /** 创建一个数组,设定估计容量 */  
  8. static CCArray* createWithCapacity(unsigned int capacity);  
  9. /** 同一个一个数组创建一个数组 */  
  10. static CCArray* createWithArray(CCArray* otherArray);  
  11. /** 
  12.  @brief   通过文件导入一个数组 
  13.  @param   pFileName  一个*.plist格式的文件 
  14.  @return  返回CCArray数组指针 
  15.  */  
  16. static CCArray* createWithContentsOfFile(const char* pFileName);  
  17.   
  18. /* 
  19.  @brief 同上, 但是不会调用autorelease, 所以调用之后需要执行release(). 
  20.  */  
  21. static CCArray* createWithContentsOfFileThreadSafe(const char* pFileName);  
  22.   
  23. /** 初始化数组 */  
  24. bool init();  
  25. /** 通过一个对象初始化数组 */  
  26. bool initWithObject(CCObject* pObject);  
  27. /** 通过一些对象初始化数组 */  
  28. bool initWithObjects(CCObject* pObject, ...);  
  29. /** 初始化数组,设定估计容量 */  
  30. bool initWithCapacity(unsigned int capacity);  
  31. /** 通过一个数组初始化数组 */  
  32. bool initWithArray(CCArray* otherArray);  
  33.   
  34. // 查询数组函数  
  35.   
  36. /** 返回数组元素的数量 */  
  37. unsigned int count() const;  
  38. /** 返回数组的估计容量 */  
  39. unsigned int capacity() const;  
  40. /** 通过对象去获得这个对象在数组中的下标,如果数组中没有这个对象会返回UINT_MAX */  
  41. unsigned int indexOfObject(CCObject* object) const;  
  42. /** 通过一个正确的下标去获得一个元素 */  
  43. CCObject* objectAtIndex(unsigned int index);  
  44. /** 返回最后一个元素 */  
  45. CCObject* lastObject();  
  46. /** 返回一个随机元素 */  
  47. CCObject* randomObject();  
  48. /** 判断数组是否包含该对象 */  
  49. bool containsObject(CCObject* object) const;  
  50. /** 从 1.1 之后,两个数组进行对比 */  
  51. bool isEqualToArray(CCArray* pOtherArray);  
  52.   
  53. // 添加函数  
  54.   
  55. /** 添加一个对象 */  
  56. void addObject(CCObject* object);  
  57. /** 添加数组所有元素 */  
  58. void addObjectsFromArray(CCArray* otherArray);  
  59. /** 插入一个对象到一个正确的下标位置 */  
  60. void insertObject(CCObject* object, unsigned int index);  
  61.   
  62. // 删除函数  
  63.   
  64. /** 删除最后一个元素 */  
  65. void removeLastObject(bool bReleaseObj = true);  
  66. /** 删掉数组中形参的元素 */  
  67. void removeObject(CCObject* object, bool bReleaseObj = true);  
  68. /** 通过一个正确的下标去删除元素 */  
  69. void removeObjectAtIndex(unsigned int index, bool bReleaseObj = true);  
  70. /** 通过一个数组去删除元素 */  
  71. void removeObjectsInArray(CCArray* otherArray);  
  72. /** 删除所有元素 */  
  73. void removeAllObjects();  
  74. /** 通过一个快速方式去删除元素 */  
  75. //快速方式就是:删除这个元素之后,将最后一个元素填充到删除位置。这样会打乱顺序,慎用  
  76. void fastRemoveObject(CCObject* object);  
  77. /** 通过一个快速方式去删除下标位置的元素 */  
  78. void fastRemoveObjectAtIndex(unsigned int index);  
  79.   
  80. //  重新安排内容  
  81.   
  82. /** 交换元素 */  
  83. void exchangeObject(CCObject* object1, CCObject* object2);  
  84. /** 交换制定的两下标的元素 */  
  85. void exchangeObjectAtIndex(unsigned int index1, unsigned int index2);  
  86.   
  87. /** 用一个对象去替换指定下标的元素 */  
  88. void replaceObjectAtIndex(unsigned int uIndex, CCObject* pObject, bool bReleaseObject = true);  
  89.   
  90. /** 翻转数组 */  
  91. void reverseObjects();  
  92. /* 缩小数组,让数组占用的内存符合元素的数量 */  
  93. void reduceMemoryFootprint();  


下面来介绍CCArrary几个可以用来偷懒的预编译:

  1. #define CCARRAY_FOREACH(__array__, __object__)  //遍历所有元素,后面会举例  
  2. #define CCARRAY_FOREACH_REVERSE(__array__, __object__)     //反序遍历元素  
  3. #define CCARRAY_VERIFY_TYPE(__array__, __type__)   //判断数组元素是否属于某类对象  
  4. #define arrayMakeObjectsPerformSelector(pArray, func, elementType)//让数组中所有元素去执行某一个函数  
  5. #define arrayMakeObjectsPerformSelectorWithObject(pArray, func, pObject, elementType)//让数组中所有元素去执行某一个函数 ,带参数  

举例:

  1. CCArray* arr = CCArray::create();  
  2.   
  3. CCObject* pNode;  
  4. CCARRAY_FOREACH(arr,pNode)  
  5. {  
  6.     pNode->retainCount();  
  7.     //遍历arr数组,让每一个元素执行retainCount()函数  
  8. }  

注意,不能通过CCARRAY_FOREACH去遍历删除元素,会删不干净。

原因:http://blog.csdn.net/lyh66/article/details/9613055

但是可以通过CCARRAY_FOREACH_REVERSE去遍历删除

阅读更多
文章标签: cocos2d-x
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

[转]cocos2d-x中的CCArray

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭