CCArray
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();
最新文章
- Typical EEG waveforms during sleep 睡眠状态下的几种典型EEG波形
- ORA-1034 ORACLE not available (转)
- 每天一个percona 工具 --- pt-kill
- 网络方案 &; HTTP状态码
- java se the operation is not applicable to the current selection
- 【转】【C#】【Thread】【Task】多线程
- stm32工程模板的创建
- DOM 之 SAX操作
- iOS NSString中字符串的删除,替换
- TEST ON 平安夜
- 如何用 Parse 和 Swift 搭建一个像 Instagram 那样的应用?
- BM25相关度打分公式
- C#获取数据库中的Instance
- Codeforces 377
- Android 源码编译及常见错误及解决方法
- 关于 ASP.NET MVC 4 如果管理用户
- hadoop错误org.apache.hadoop.util.DiskChecker$DiskErrorException Could not find any valid local directory for
- 使用菜单(Menu)资源
- MYSQL忘记root密码后如何修改
- React中路由传参及接收参数的方式
热门文章
- 动态规划之----我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
- JAVA动态代理详解
- 把Wordpress集成到zen-cart里方法 各种修改 经典机制
- SVN分支的创建,合并,与销毁和相关操作
- kick_ball
- springmvc json数据
- VS2010 C#调用C++ DLL文件
- UIScrollView代理方法
- ListView下拉刷新、上拉载入更多之封装改进
- (转)多个mapreduce工作相互依赖处理方法完整实例(JobControl)