我有处理设备地址簿的表,该表可以轻松500+联系。 此外,表每3秒更新一次,然后运行代码
[tableContacts beginUpdates];
[tableContacts reloadRowsAtIndexPaths:arr withRowAnimation:UITableViewRowAnimationNone];
[tableContacts endUpdates];
每次更新时,我都会更新单元格上的文本和一个图像(存在)。 单元格的所有计算都是后台线程上的句柄。 问题是大多数时候滚动不够平滑。 当我触摸桌子开始滚动然后滚动没有响应1秒左右(我想因为这个时候桌子很新鲜)。
所以问题是如何处理在很短的时间内获得数据且需要刷新的非常长的表?
答案 0 :(得分:0)
有一种简单的方法和正确的方法,但无论如何 - 不要重新加载行。通过[self.tableView cellForRowAtIndexPath:]
获取单元格并更改其属性,这是第一个。然后,在你的桌子上做一些强制更新。
您桌子的实际数据源是什么?是NSFetchedResultsController
吗?它是控制器NSArray
吗?在任何情况下,您都应该只更新具有新数据的单元格。如果您使用CoreData,请使用NSFetchedResultsControllerDelegate
方法。对于NSArray
,我建议使用KVO - 观察数组中已更改的对象。