zoukankan      html  css  js  c++  java
  • cocos2d-x关于CCTableView的“乱序问题”的理解

    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的内容。

     


  • 相关阅读:
    IT名词备忘录——汇编
    逆转链表的实现
    编写安全的代码的一些技巧
    extern c 谈
    回调函数
    职场必备八个黄金句型
    CString类的用法介绍和自己动手写的CString类
    61条面向对象设计的经验原则(转贴)
    sprintf的用法
    VisualStudioVS2010统计代码行数
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3149566.html
Copyright © 2011-2022 走看看