ios - Swift - reloadData 不按顺序工作吗?
问题描述
我认为 Xcode 中的代码是按顺序工作的。
例如
print("1")
print("2")
print("3")
// result
// 1
// 2
// 3
但是当我调用 reloadData 时,它不能按顺序工作。
{
...
collectionView.reloadData()
print("1")
print("2")
...
}
调用 reloadData 后, print("1"), ("2") 工作。
之后,collectionView 的 dataSource 方法被调用。
我认为 reloadData 包括 DataSource 的方法和 Delegate 的方法。
所以,我认为,
在调用 reloadData 之后,调用 dataSource 的方法,然后调用 print("1"), ("2")。
为什么 reloadData 不能按顺序工作?
我没有做任何dispatchQueue。
解决方案
这是因为运行循环的工作方式。您的代码在隐式事务中运行。您的代码结束,然后事务自行提交。然后,作为事务提交过程的一部分,屏幕被更新:首先布局,然后绘图,然后服从层属性更改,然后开始任何动画。
所以基本上reloadData
是一个请求重新绘制表格视图的队列,但实际的重新绘制不会发生,直到你的所有代码都停止并且事务被提交。
(将其视为平行于 可能会有所帮助setNeedsDisplay
。)
推荐阅读
- r - ggplot2 组覆盖填充命令
- django - 使用 Django 视图值更新 JavaScript
- python - Pandas pivot_table 发出关于在日期类型的数据集上使用边距时推断 datetime64 的 FutureWarning
- flutter - 购买后不调用函数
- android - 布局检查器未显示可组合树
- html - 服务器代码是持续运行还是仅在用户发出请求时运行?
- bash - 安装了两个版本的 bash,来自终端的关于我正在使用哪个版本的信息冲突
- android-studio - 检查 URL 连接 Android Studio
- html - SVG 中的等宽字体具有可变宽度字形
- javascript - child() 不是函数图片上传 firebaseSDK Ver9 for Web (JavaScript)