-[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