我在我的项目中使用Realm,我想知道realm.write()
方法是否同步。
我的例子在这里:
let realm = try! Realm()
try! realm.write {
realm.delete(message)
}
realm.invalidate()
在上面的例子中,我正在删除一个领域对象和我写的外部括号invalidate()
这是我的困惑:
如果write()
是同步的,那么invalidate()
就可以了
如果Async比之前写的invalidate将调用,而realm将释放但操作正在后台运行
谢谢
答案 0 :(得分:3)
Realm.write是同步的。 It just calls realm.beginWrite()
/realm.commitWrite()
with some error handling:
public func write(_ block: (() throws -> Void)) throws {
beginWrite()
do {
try block()
} catch let error {
if isInWriteTransaction { cancelWrite() }
throw error
}
if isInWriteTransaction { try commitWrite() }
}
答案 1 :(得分:-2)
您编写的方法是同步方法,因为您没有为其指定后台队列。 Invalidate()方法的目的
func invalidate() 描述 使Realm管理的所有对象,结果,链接对象和列表无效。 Realm对其访问的数据版本保持读锁定,因此在不同线程上对Realm所做的更改不会修改或删除此Realm看到的数据。调用此方法会释放读取锁定,允许磁盘上使用的空间由以后的写入事务重用,而不是增长文件。在对先前从您不再需要的Realm读取数据的后台线程执行长阻塞操作之前,应调用此方法。 从当前线程上的此Realm实例获取的所有对象,结果和列表实例均无效。无法使用对象和数组。结果将变空。 Realm本身仍然有效,下次从Realm读取数据时会隐式启动新的读取事务。 连续多次调用此方法而不从Realm读取任何数据,或者在从Realm读取任何数据之前,这是一个无操作。可能无法在只读领域上调用此方法。