首页 > 解决方案 > 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。

标签: iosswiftcollectionview

解决方案


这是因为运行循环的工作方式。您的代码在隐式事务中运行。您的代码结束,然后事务自行提交。然后,作为事务提交过程的一部分,屏幕被更新:首先布局,然后绘图,然后服从层属性更改,然后开始任何动画。

所以基本上reloadData是一个请求重新绘制表格视图的队列,但实际的重新绘制不会发生,直到你的所有代码都停止并且事务被提交。

(将其视为平行于 可能会有所帮助setNeedsDisplay。)


推荐阅读