我有一个案例,我在后台线程中的 Dispatch.global 中将数据保存到 Realm 数据库,然后在同一个线程中我调用 Dispatch.main.async 从 Realm 获取数据并更新 UITableView 数据。
问题是我得到的数据数量减少了(data.count)。假设总数据数为 10,那么有时我有时会得到所有数据,有时会少于 10。
为什么会这样?
以下是示例代码片段
func getData(data: [String]) {
DispatchQueue.global(qos: .background).async {
RealmManager.removeDataFromRealm()
RealmManager.saveDataToRealm(data)
Dispatch.main.async {
let dataFromRealm = RealmManager.getDataFromRealm()
self.sendDataToUI(dataFromRealm)
}
}
}
在上面的代码中 removeDataFromRealm()、saveDataToRealm(data)、getDataFromRealm() 是领域类静态函数,我在其中保存、删除、从领域数据库中获取数据
我已经从我理解的所有方面调试了代码,它保存(saveDataToRealm(data))所有数据,然后获取(getDataFromRealm())数据,根据我的理解,为什么它有时会向我发送更少的数据
在获取数据时,RealmManager getDataFromRealm() 静态方法没有应用过滤器。
假设上面的代码进入竞争状态,那么下面的代码片段会发生什么
func getImageFromServer (url: URL) {
DispatchQueue.global(qos: .background).async {
do {
let data = try Data(contentsOf: url)
DispatchQueue.main.async {
self.imageView.image = UIImage(data: data)
}
}catch {
print(error)
}
}
}
由于 getImageFromServer() 首先获取数据,然后 Dispatch.main.async 在将“Data(contentsOf: url)”转换为显然需要时间的数据后执行。
为什么在上述情况下它的工作方式不同?