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

     


  • 相关阅读:
    二进制位运算
    Leetcode 373. Find K Pairs with Smallest Sums
    priority_queue的用法
    Leetcode 110. Balanced Binary Tree
    Leetcode 104. Maximum Depth of Binary Tree
    Leetcode 111. Minimum Depth of Binary Tree
    Leetcode 64. Minimum Path Sum
    Leetcode 63. Unique Paths II
    经典的递归练习
    案例:java中的基本排序
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3149566.html
Copyright © 2011-2022 走看看