博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CCArray(转)
阅读量:4667 次
发布时间:2019-06-09

本文共 1308 字,大约阅读时间需要 4 分钟。

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(1);ccDrawColor4B(0,255,255 ,255);ccDrawRect( CCPointMake(0, 0), CCPointMake(50 + count, 50 + count));}

 

 

转载于:https://www.cnblogs.com/yuan19/p/3286814.html

你可能感兴趣的文章
为什么需要Docker?
查看>>
国内5家云服务厂商 HTTPS 安全性测试横向对比
查看>>
how to control project
查看>>
转 python新手容易犯的6个错误
查看>>
第四节 -- 列表
查看>>
Python入门学习笔记4:他人的博客及他人的学习思路
查看>>
webstorm里直接调用命令行
查看>>
关联规则算法之FP growth算法
查看>>
对数组序列进行洗牌
查看>>
决策树
查看>>
团队作业
查看>>
如何避免在简单业务逻辑上面的细节上面出错
查看>>
win7,Ubuntu 12.04 双系统修改启动项顺序三方法
查看>>
python--列表推导式和生成表达式
查看>>
P - Psychos in a Line 单调队列
查看>>
POJ 2653 Pick-up sticks(计算几何)
查看>>
大型网站高并发的架构演变图-摘自网络
查看>>
8丶运行及总结
查看>>
Unity获取手机的电量时间
查看>>
Spring框架:Spring容器具体解释
查看>>