CCArray也是cocos2d-x自己写的类。它相当于是objc的NSArray。在cocos2d-x中是没有NSArray的概念的(NSArray和NSMutableArray的唯一区别就是一个不可以改变数组中含有的对象,另一个可以改变)。但是CCArray也有一个小问题。首先,CCArray是不能使用new的方式创建的。其次,使用CCArray::array()创建的数组,即使这个数组已经是当前类的成员变量,也必须要做一次retain,否则的话在创建数组的函数返回的时候,CCArray就会被直接释放掉了。由于这个问题也无法通过编译时候暴露出来,而且在objc中创建自动释放的NSArray类型的成员变量的时候是不需要retain的,所以当我从objc转为使用cocos2d-x的时候,经常会忘记做retain,多次导致了程序在其他函数中使用该成员变量的时候出现错误。

初始化
    CCArray *tmpArray = CCArray::array();
    tmpArray->retain();

增加元素
tmpArray>addObject(元素);

删除
    tmpArray->removeAllObjects();
    tmpArray->release();
不是因为cocos2d-x引用计数设计的有问题,而是因为cocos2d-x的autorelease机制和cocoa的NSAutorelease有很大区别,没搞清楚就会出现疑问。
cocos2d-x里,所有autorelease的对象只能在一个event loop里保持有效,也就是一次渲染frame,当每帧渲染结束时,pool manager会对他管理的每个autorelease的对象做一次release()调用,cocos2d-x里的代码很明确:
void CCDisplayLinkDirector::mainLoop(void)
{
    ...
         // release the objects
         CCPoolManager::sharedPoolManager()->pop();       
     ...
}

void CCPoolManager::pop()
{
    ...
    m_pCurReleasePool->clear();

最新文章

  1. Typical EEG waveforms during sleep 睡眠状态下的几种典型EEG波形
  2. ORA-1034 ORACLE not available (转)
  3. 每天一个percona 工具 --- pt-kill
  4. 网络方案 & HTTP状态码
  5. java se the operation is not applicable to the current selection
  6. 【转】【C#】【Thread】【Task】多线程
  7. stm32工程模板的创建
  8. DOM 之 SAX操作
  9. iOS NSString中字符串的删除,替换
  10. TEST ON 平安夜
  11. 如何用 Parse 和 Swift 搭建一个像 Instagram 那样的应用?
  12. BM25相关度打分公式
  13. C#获取数据库中的Instance
  14. Codeforces 377
  15. Android 源码编译及常见错误及解决方法
  16. 关于 ASP.NET MVC 4 如果管理用户
  17. hadoop错误org.apache.hadoop.util.DiskChecker$DiskErrorException Could not find any valid local directory for
  18. 使用菜单(Menu)资源
  19. MYSQL忘记root密码后如何修改
  20. React中路由传参及接收参数的方式

热门文章

  1. 动态规划之----我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
  2. JAVA动态代理详解
  3. 把Wordpress集成到zen-cart里方法 各种修改 经典机制
  4. SVN分支的创建,合并,与销毁和相关操作
  5. kick_ball
  6. springmvc json数据
  7. VS2010 C#调用C++ DLL文件
  8. UIScrollView代理方法
  9. ListView下拉刷新、上拉载入更多之封装改进
  10. (转)多个mapreduce工作相互依赖处理方法完整实例(JobControl)