我有一个情况,即代码更改其collectionView数据源,然后多次调用
所以问题是:这样做是否有意义并解决了竞态条件?我的理解是用
如果您对如何解决此问题有其他想法,那就太好了。 更新: 例如,如果我们在主线程上有以下代码:
reloadData()
,我认为这会导致应用程序崩溃,因为数据源变化非常快,因此我使用DispatchQueue.main.async
包装了该(更改数据源,然后重新加载集合视图)代码片段,从而解决了崩溃问题。所以问题是:这样做是否有意义并解决了竞态条件?我的理解是用
DispatchQueue.main.async
包装这段代码将在reloadData()函数完成之前不会再次执行此段代码,这对吗?如果您对如何解决此问题有其他想法,那就太好了。 更新: 例如,如果我们在主线程上有以下代码:
self.collectionView.dataSource = self.dataSource
self.collectionView.reloadData()
当这段代码被快速连续调用两次时,数据源会在第一次重新加载过程中发生更改。
为了解决此问题,我将此代码片段包装在异步块中,以确保数据源在第一次重新加载完成之前不会更改。具体如下:
DispatchQueue.main.async {
self.collectionView.dataSource = self.dataSource
self.collectionView.reloadData()
}
这会确保在 reloadData()
完成之前,数据源不会发生变化吗?