尽管使用自动释放池并在每次访问领域时实例化一个新领域实例,但有时我会得到不一致的状态。
在以下(人为的)示例中,只有一个MyObject
存储在数据库中。删除后,第二个查询仍然看到该实例。任何人都可以阐明为什么会这样吗?它在大多数情况下都有效,但在极少数情况下我会出现不一致的状态。有时在两个单独的线程上访问领域时会发生这种情况,但它曾经发生在同一个线程上。
我知道我可能可以realm.refresh()
在第二个查询之前打电话(我没有测试过),但我的问题是我为什么需要这样做?每个函数都有自己的领域实例,并根据文档推荐包装在 autoreleasepool 中。我是不是误会了什么?
func start() {
DispatchQueue.global().async {
update1()
update2()
}
}
func update1() {
autoreleasepool {
let realm = try! Realm()
let object = realm.objects(MyObject.self).first! // expecting object here
try! realm.write {
realm.delete(object)
}
}
}
func update2() {
autoreleasepool {
let realm = try! Realm()
if let object = realm.objects(MyObject.self).first {
fatalError("not expecting object here")
}
}
}
提前致谢!