博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cocos2d-x关于CCTableView的“乱序问题”的理解
阅读量:6813 次
发布时间:2019-06-26

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

Cocos2d-x有一个不错的控件CCTableView。之前用的时候发现有cell的顺序错乱和重复出现的问题。后来仔细看了一下源码,发现是自己用法错误。但是网上有人说是一个bug,要改源码。我发现2.04以上的源码都是没问题的。

先来看看网上说的改源码是怎么样改的:

 

CCTableViewCell *CCTableView::dequeueCell()

{

    CCTableViewCell *cell;

    

//    if (m_pCellsFreed->count() ==0) {

if (1) {

        cell = NULL;

    } else {

        cell = (CCTableViewCell*)m_pCellsFreed->objectAtIndex(0);

        cell->retain();

        m_pCellsFreed->removeObjectAtIndex(0);

        cell->autorelease();

    }

    return cell;

}

也就是说,让 dequeueCell总是返回NULL。这样一来

 

CCTableViewCell* ProfileLayer::tableCellAtIndex(cocos2d::extension::CCTableView *table,unsignedint idx){

    CCTableViewCell* cell = table->dequeueCell();

 

if (!cell) {}

 

return cell;

这个函数中每次都在执行if (!cell)语句,如果这个if语句里是创建cell的话,当你不断滑动这个view,就会不断创建,内存会越来越少,直到crash。

正确的用法是在

tableCellAtIndex(cocos2d::extension::CCTableView *table,unsigned int idx)中,每次根据idx来“刷新”cell的内容。也就是说,dequeueCell()返回的不一定是空,有可能是其它cell的内容,这个时候你可以把这个cell的内容都抹掉再重现加载cell的顺序为idx的内容。

 

 

转载地址:http://cjzzl.baihongyu.com/

你可能感兴趣的文章
Flutter实战(一)写一个天气查询的APP
查看>>
Python零基础学习笔记(十二)—— 字符串及其常用方法
查看>>
Webpack 和 Gulp 构建伪命令行项目
查看>>
在线面试, 前端, 提纲, 草稿
查看>>
hive_异常_01_ Terminal initialization failed; falling back to unsupported
查看>>
分布式事务键值数据库 TiKV 加入 CNCF 沙箱孵化器
查看>>
Vue - day1
查看>>
kvm.virsh常用命令篇
查看>>
[Hive]Hive使用指南四 客户端导入数据
查看>>
10.JUC线程高级-线程八锁
查看>>
Apache Flink轻量级异步快照机制源码分析
查看>>
PostgreSQL 11 preview - 分区表 增强 汇总
查看>>
MediaCodec在Android视频硬解码组件的应用
查看>>
用JAVA自己画一张二维码
查看>>
Flutter Engine线程管理与Dart Isolate机制
查看>>
美国泛达公司:下一代数据中心的光缆布线系统
查看>>
以太坊(ethereum)技术开发相关资料
查看>>
Pandas数据排序
查看>>
gulp常用插件
查看>>
2018 前端趋势:更一致,更简单
查看>>