cocos2d-x关于CCTableView的“乱序问题”的理解

摘要:
Cocos2d-x有一个不错的控件CCTableView。之前用的时候发现有cell的顺序错乱和重复出现的问题。我发现2.04以上的源码都是没问题的。先来看看网上说的改源码是怎么样改的:CCTableViewCell*CCTableView::dequeueCell(){CCTableViewCell*cell;//if{if{cell=NULL;}else{cell=m_pCellsFreed-˃objectAtIndex;cell-˃retain();m_pCellsFreed-˃removeObjectAtIndex;cell-˃autorelease();}returncell;}也就是说,让dequeueCell总是返回NULL。cell){}returncell;}这个函数中每次都在执行if(!也就是说,dequeueCell()返回的不一定是空,有可能是其它cell的内容,这个时候你可以把这个cell的内容都抹掉再重现加载cell的顺序为idx的内容。

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,unsignedintidx){

CCTableViewCell* cell = table->dequeueCell();

if (!cell) {}

returncell;

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

正确的用法是在

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

免责声明:文章转载自《cocos2d-x关于CCTableView的“乱序问题”的理解》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇002.使用kubeadm安装kubernetes 1.17.0Linux内存管理原理下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

TCP内核源码分析笔记

Table of Contents 1 术语 1.1 ABC 1.2 SACK 1.3 D-SACK 1.4 F-RTO 1.5 nagle算法 1.6 cork算法 1.7 template 2 tcp_v4_connect() 3 sys_accept()3.1 tcp_accept() 4 三次握手 4.1 客户端发送SYN段 4.2...

源码分析:若依用户 user_id查询返回除了用户表,为何还带有部门dept和角色role表呢

 通过认真分析SysUser.java 部份源码如下, private SysDept dept; 以下是toString(){ .append("dept", getDept()) .append("roles", getRoles()) } package com.ruoyi.common.core.domain.entity; imp...

UITableView总结

性能优化 /** * 每当有一个cell要进入视野范围内,就会调用一次 */ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *ID = @"wine...

Android 2.1 源码结构分析

Android 2.1   |-- Makefile   |-- bionic (bionic C库)   |-- bootable (启动引导相关代码)   |-- build (存放系统编译规则及generic等基础开发包配置)   |-- cts (Android兼容性测试套件标准)   |-- dalvik (dalvik JAVA虚拟机)   |-...

mysql-5.6.27源码安装及错误解决办法

环境:centos6.5.x86_64 wgethttp://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.27.tar.gz yum install -y cmake 当然也可以自己下载源码包安装,为方便就Yum安装了 useradd -s /sbin/nologin mysql tar zxvf mysql-...

Netty源码剖析-关闭服务

参考文献:极客时间傅健老师的《Netty源码剖析与实战》Talk is cheap.show me the code! ----主线:    ----源码:   先在服务端加个断点和修改下代码:如图:  然后启动server和client;然后跳过bossGroup到workerGroup;进入workerGroup的关闭:在此之前呢,先在NioEven...