-[UITableView reloadData] 是异步的还是同步的?

Posted

技术标签:

【中文标题】-[UITableView reloadData] 是异步的还是同步的?【英文标题】:Is -[UITableView reloadData] asynchronous or synchronous? 【发布时间】:2012-03-12 22:24:24 【问题描述】:

当您在表视图实例上调用 -reloadData 时,是否会使所有 UITableViewDataSource 调用异步? 谢谢。

【问题讨论】:

确保您看到How to tell when UITableView has completed ReloadData? 【参考方案1】:

这个方法实际上只是从表中删除所有UITableViewCell 视图。重绘表格时会调用数据源委托方法。

所以,它是异步的。

编辑:

实际上,有些调用是同步的。部分和行数和行高会立即更新,因此,例如 contentSize 在调用后正确设置。另一方面,在重新绘制表之前不会调用tableView:cellForRowAtIndex:

【讨论】:

所以如果我有一个支持 tableview 的数组。如果在调用之前更新数组,cellForRowAtIndexPath 会崩溃,我们应该如何解决这个问题? @bogardon 我不明白 - 为什么会崩溃? 如果在所有 cellForRow... 调用之前再次调用 reloadData 并且新的单元格数 cellForRow 要求的索引太高 至少在 ios 8.2+ 上的集合视图的情况下,numberOfItemsInSection 也是异步调用的,由布局代码(流布局等)驱动。 @bendytree 所以我必须防止这种情况发生吗?

以上是关于-[UITableView reloadData] 是异步的还是同步的?的主要内容,如果未能解决你的问题,请参考以下文章

UITableView.reloadData() 没有刷新 tableView。没有错误信息

UITableView 的 reloadData() 的替代方案?

UIView 与 UITableview 和 UIImageview,使用 reloadData 访问 UITableview

UITableView 强制 sectionIndex 更新而不调用 reloadData

iOS UITableView reloadData 刷新结束后执行后续操作

调用 reloadData 时 UITableView 有不需要的动画