0

正如标题所说,我正在使用一个连接到由 ViewController 调解的 FetchedResultsController 的 UITableView。

当用户滚动到接近网格底部并且我们获取更多数据以显示给用户时,就会发生延迟。当接收到数据时,tableview 的内容变大了,滚动暂停片刻,然后出现一些口吃,然后滚动条跳得更高,最后一切都恢复平滑。这发生在:

-(void)controllerDidChangeContent:(FetchedResultsController *)controller {
    [tableView reloadData];
}

我已经完成了在 Apple 的底座和 SO 中找到的所有优化。

  1. 我应该重用视图。这对性能帮助最大。用于细胞的初始化几乎不会被击中。

  2. 在使用 imageview 之前在后台线程中解码图像(在上下文中绘制)。(请注意,在我们获得图像以替换单元格的“加载”用户界面之前,口吃就发生了)。

  3. 极短且快速的委托方法。

  4. 不透明的手绘视图。

有没有人有任何关于处理向 UITableView 添加行的建议,它不会阻塞 UI 线程并防止滚动条跳跃?我试过使用 [tableView insertRows...] 但同样的卡顿和滚动条跳跃发生了,我认为这很奇怪。

干杯,Zed

4

1 回答 1

0

对于 UITableView 来说,这实际上是很自然的。不幸的是,它并不优雅。如果您的应用程序不断地检索数据并重新加载,那么这也会影响您的性能。我什至测试了您的理论并使用 NSMutableArray 手动填充了 UITableView。我给了数组几个值,这甚至足以让它滞后。(请记住,没有涉及额外的方法,甚至没有涉及 reloadData。只是基本的委托方法)。

于 2012-07-13T10:13:17.477 回答