我正在使用显示用户联系人的UITableView。对于具有较大联系基础(5000多个联系人)的某些用户,表视图还具有5000多个行。

在具有约12k行的演示案例中,reloadData方法在设备上花费100ms。

在这100毫秒中,“ tableView:heightForRowAtIndexPath:”仅花费30毫秒,但实际上仅是:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(indexPath.row>50)
    {
        return 47
    }
    return 62;
}


这是因为它被称为12,000次。

反正有什么可以加快速度吗?

最佳答案

根据Apple的UITableView文档:


  “使用tableView:heightForRowAtIndexPath:而不是rowHeight会对性能产生影响。每次
  将显示表视图,它调用tableView:heightForRowAtIndexPath:
  在代表的每一行上,这可能会导致
  具有大量表视图的重大性能问题
  行(大约1000或更多)。”


我强烈建议采用其他实现,无论是将数据源限制为较小的数量,还是仅在需要时(即滚动)或其他方法进行扩充。

我刚刚创建了一个非常简单的类似代码,具有20,000行,并在创建单元格以及调用heightForRowAtIndexPath时进行了记录,最初只创建了10个单元格,但是在生成视图之前,两次计算了所有20,000个高度。

关于ios - uitableview reloaddata方法阻止uithread,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24167082/

10-14 23:16