我正在使用显示用户联系人的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/