gpt4 book ai didi

ios - uitableview reloaddata 方法阻塞 uithread

转载 作者:行者123 更新时间:2023-11-28 22:05:21 25 4
gpt4 key购买 nike

我正在使用显示用户联系人的 UITableView。对于一些拥有大量联系人(5000 多个联系人)的用户,tableview 也有 5000 多行。

具有约 12k 行的演示案例中的 reloadData 方法在设备上需要 100 毫秒。

在这 100 毫秒中,仅“tableView:heightForRowAtIndexPath:”就需要 30 毫秒,但实际上只是:

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

这是因为它被调用了 12,000 次。

有什么方法可以加快速度吗?

最佳答案

根据 Apple 的 UITableView 文档:

"There are performance implications to using tableView:heightForRowAtIndexPath: instead of rowHeight. Every time a table view is displayed, it calls tableView:heightForRowAtIndexPath: on the delegate for each of its rows, which can result in a significant performance problem with table views having a large number of rows (approximately 1000 or more)."

我强烈推荐一种不同的实现方式,无论是将您的数据源限制为较小的数量并仅在需要时(即滚动)增加它还是其他一些方法。

我刚刚创建了非常简单的类似代码,包含 20,000 行,并记录了单元格的创建时间和调用 heightForRowAtIndexPath 的时间,最初只创建了 10 个单元格,但 全部 20,000甚至在生成 View 之前就计算了高度两次

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com