OC学习41:UITableView

张建 lol

问题1

如果在调用 reloadData 方法后,需要立即获取 tableView 的cell、高度、需要滚动tableView,那么,直接在 reloadData 后获取是可能有问题的

原因分析:

  • reloadData 并不会等待 tableView 更新结束后才返回,而是 立即返回,之后再计算高度、获取cell(主线程)

  • 如果表中的数据非常大,在一个 runloop 周期没有执行完,这时,获取 tableView 的数据就会出现问题

  • Apple 并没有直接提供 reloadDataAPI,想要程序延迟到 tableView 更新结束,可以用下面的方法

解决方法:

  • 方法一
1
2
3
[self.tableView reloadData];
[self.tableView layoutIfNeeded];
// 刷新完成

layoutIfNeeded 会强制绘制并等待完成

  • 方法二
1
2
3
4
[self.tableView reloadData];
dispatch_async(dispatch_get_main_queue(), ^{
// 刷新完成
});

reloadData 会在主队列执行,而 dispatch_get_main_queue 会等待机会,直到主队列空闲才执行

  • Post title:OC学习41:UITableView
  • Post author:张建
  • Create time:2023-04-24 11:23:21
  • Post link:https://redefine.ohevan.com/2023/04/24/OC/OC学习41:UITableView/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.
On this page
OC学习41:UITableView