http://blog.csdn.net/passtome/article/details/7966451

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();
    ...

使用CCArray注意事项

CCArray一般不会被添加到其他的类中,所以其引用计数为1,并且被设置为autorelease

所以,创建的CCArray对象一定要retain,并在其析构方法中调用release释放内存

CCObject *object = NULL;
count++;
CCARRAY_FOREACH(array, object)
{
CHECK_GL_ERROR_DEBUG();
ccPointSize();
ccDrawColor4B(,, ,);
ccDrawRect( CCPointMake(, ), CCPointMake( + count, + count));
}

CCArray(转)的更多相关文章

  1. cocos2d-x 之 CCArray 的遍历(3)

    cocos2d-x中CCArray的遍历,需要几个宏.现代C++程序设计建议尽量不要使用宏,所以数组的遍历也可以自己写. 但cocos2d-x官方已经提供了几个方便数组遍历的几个宏,用好了,能方便许多 ...

  2. cocos2d-x 之 CCArray 源码分析(2)

    cocos2d-x 自己实现了一个数组CCArray ,下面我们来分析一下CCArray的源码 CCArray继承CCObject,所以,CCArray也具有引用计数功能和内存自动管理功能. 数组的源 ...

  3. cocos2d CCArray

    CCArray* arr=CCArray::create(); arr->retain();//如果不加这个东西,CCArray会被清空 arr->addObject(CCSprite:: ...

  4. cocos2d-x CCArray

    转自:http://blog.csdn.net/onerain88/article/details/8164210 1. CCArray只是提供了一个面向对象的封装类 其继承于CCObject类(CC ...

  5. cocos2d-x 之 CCArray 源码分析

    cocos2d-x 自己实现了一个数组CCArray ,下面我们来分析一下CCArray的源码 CCArray继承CCObject,所以,CCArray也具有引用计数功能和内存自动管理功能. 数组的源 ...

  6. CCDictionary&CCArray执行retain()重要点

    CCDictionary也需要执行retain(),否则则跟CCArray,返回则释放对象. 在Lua中,忘记了retain(),导致一些出现gCCDictionary:objectForKey(ke ...

  7. cocos2d-实现读取.plist文件(使用数组CCArray)

    学习札记之cocos2d-x2.1.1实现读取.plist文件(使用数组CCArray) <?xml version="1.0" encoding="UTF-8&q ...

  8. 7.数据本地化CCString,CCArray,CCDictionary,tinyxml2,写入UserDefault.xml文件,操作xml,解析xml

     数据本地化 A CCUserDefault 系统会在默认路径cocos2d-x-2.2.3\projects\Hello\proj.win32\Debug.win32下生成一个名为UserDef ...

  9. CCArray

    CCArray也是cocos2d-x自己写的类.它相当于是objc的NSArray.在cocos2d-x中是没有NSArray的概念的(NSArray和NSMutableArray的唯一区别就是一个不 ...

随机推荐

  1. 关于android:screenOrientation="portrait"等

    1.android:screenOrientation="portrait",表示当切换横竖屏的时候,屏幕的内容始终以竖屏显示,而不会根据屏幕的方向来显示内容. 2.插入个Andr ...

  2. VS2013默认快捷键

    目录: Global 分析 调试器上下文菜单 体系结构 调试器上下文菜单 生成 诊断中心 类视图上下文菜单 Edit 调试 编辑器上下文菜单 文件 项目和解决方案上下文菜单 帮助 重构 负载测试 解决 ...

  3. C# 连接SQL数据库

    感觉很有必要总结一下 一:C# 连接SQL数据库 Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;P ...

  4. AFNetworking 3.0的GET和POST的使用

    POST: AFHTTPSessionManager *session = [AFHTTPSessionManager manager]; session.requestSerializer = [A ...

  5. poj1182 并查集

     题目连接:http://poj.org/problem?id=1182 基础并查集,需要维护与根节点关系,解析见代码: /* poj 1182 并查集 思路分析:让你分析这些话里面多少假的 只需要用 ...

  6. 3.2 GUN as汇编(本文内容大部分引用原文,非原创)

    as86汇编仅仅用于编译内核中的boot/bootsect.s引导扇区程序和实模式下的设置程序boot/setup.s.内核中其余所有汇编语言程序(包括C语言产生的汇编程序)均使用gas来编译,并与C ...

  7. 工作中用到的Jquery特效

    jQuery缓慢弹出下拉tab导航 http://sc.chinaz.com/jiaoben/130811578701.htm

  8. python: list[-1] 与 list[-1:] 的区别

    >>> l '3.542485\t1.977398\t-1\r\n' >>> l.split() ['3.542485', '1.977398', '-1'] &g ...

  9. 《python基础教程》笔记之 序列通用操作

    索引 序列中的所有元素都是有编号的--从0开始递增.使用负数索引时,Python会从右边,也就是从最后一个元素开始计数,最后一个元素的位置编号是-1.此外,字符串是一个有字符组成的序列,字符串字面值可 ...

  10. PIN的经验和技巧

    以前总是吧PIN码排序弄成:9876543210或0123456789, 有的路由PJ好久还没出密码,但还是PJ了3~4个,大多数是抓跑, 所以,还是建议大家先跑包,实在跑不出就来PIN, 一般人的设 ...