Swift - reloadData 不按顺序工作吗?
Swift - Does not reloadData work in sequence?
我认为 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。
这是因为 运行 循环的工作方式。您的代码 运行s 在隐式交易中。您的代码结束,然后 事务自行提交。然后,作为事务提交过程的一部分,屏幕被更新:首先布局,然后绘制,然后服从层 属性 更改,然后开始任何动画。
所以基本上 reloadData
是一个排队重绘 table 视图的请求,但实际的重绘不会发生,直到您的所有代码都已停止并且事务已提交。
(将此视为与 setNeedsDisplay
平行可能会有所帮助。)
我认为 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。
这是因为 运行 循环的工作方式。您的代码 运行s 在隐式交易中。您的代码结束,然后 事务自行提交。然后,作为事务提交过程的一部分,屏幕被更新:首先布局,然后绘制,然后服从层 属性 更改,然后开始任何动画。
所以基本上 reloadData
是一个排队重绘 table 视图的请求,但实际的重绘不会发生,直到您的所有代码都已停止并且事务已提交。
(将此视为与 setNeedsDisplay
平行可能会有所帮助。)