Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios uitableview重载数据方法阻止uithread_Ios_Uitableview - Fatal编程技术网

Ios uitableview重载数据方法阻止uithread

Ios uitableview重载数据方法阻止uithread,ios,uitableview,Ios,Uitableview,我使用的是UITableView,它显示用户的联系人。对于一些联系人基数较大(5000多个联系人)的用户,tableview也有5000多行 在具有12k行的democase中,重载数据方法在设备上需要100ms 在这100毫秒中,仅“tableView:HeightForRowatineXpath:”就需要30毫秒,但实际上只是: - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath

我使用的是UITableView,它显示用户的联系人。对于一些联系人基数较大(5000多个联系人)的用户,tableview也有5000多行

在具有12k行的democase中,重载数据方法在设备上需要100ms

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

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(indexPath.row>50)
    {
        return 47
    }
    return 62;
}
这是因为它被称为12000次


是否有加快速度的方法?

除非您的单元格具有不同的高度或动态更改,否则只需设置大小,而不覆盖rowatinexpath的高度。这样做的主要目的是允许每个cel批次具有不同的尺寸,但需要花费时间。但是,如果您的单元格大小相同,它可以根据存储的值进行计算,而不是查询每个单元格并将其相加。

为什么同时加载所有500个联系人?
如果速度变慢,只需加载前50个,如果用户滚动到底部,则加载下一个项目,依此类推。

根据苹果的UITableView文档:

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

我强烈推荐一种不同的实现,无论是将您的数据源限制在一个较小的数目,并且仅在需要时(即滚动)或其他方法来增加它


我刚刚创建了非常简单的类似代码,有20000行,在创建单元格和调用heightForRowAtIndexPath时记录,最初只创建了10个单元格,但是,在视图生成之前,所有20000个高度都被计算了两次。

你确定重新加载数据需要那么长的时间,而不是数据源的实际重新加载吗?Tableview不会为所有重复使用的数据加载单元格。如何重新加载数据源?请查看文档中的tableView:EstimatedHeightForrowatineXpath:方法。它就是为了这个目的而添加到api中的。@Yan是的,我确信,因为我在instruments中检查了它。@rdelmar否,添加它是为了估计“复杂”的HeightForRowatineXpath调用,该方法仍然会为每个单元格调用,HeightForRowatineXpath也是如此。所以这对我没有帮助,因为我的HeightForRowatineXpath非常容易(只包含一个IF和两个returns)在CellForRowatineXpath中显示您的代码-我猜您没有正确地重用单元格…这并没有真正的帮助,因为这种情况下的问题发生在您向下滚动很远的时候。这也是不好的,因为当用户开始快速滚动时(这对于很长的表视图是可能的),再加载50个也没有帮助。嘿,谢谢在文档中找到它。我想我必须找到一种方法使我的细胞大小相同:/是的,这很糟糕,但如果我是你,我可能会这么做,特别是考虑到这两个细胞的大小非常接近(只有15个差异…)谢谢你的回答,我投了赞成票,因为你给出了正确的建议,但是@Mike实际上给了我苹果docu的引述和更详细的信息,所以我选择了他的答案。很抱歉