Swift Realm Write方法是同步或异步线程



我在我的项目中使用Realm,我想知道realm.write()方法是否同步。我的例子是:

let realm = try! Realm()
try! realm.write {
realm.delete(message)
}
realm.invalidate()

在上面的例子中,我正在删除一个领域对象,在大括号外我正在编写invalidate()

这是我的困惑:

  1. 如果write()是同步的,则invalidate()是正常的

  2. 如果异步写入无效将调用,领域将释放,但操作正在后台中运行

感谢

Realm.write是同步的。它只是调用带有一些错误处理的realm.beginWrite()/realm.commitWrite()

public func write(_ block: (() throws -> Void)) throws {
beginWrite()
do {
try block()
} catch let error {
if isInWriteTransaction { cancelWrite() }
throw error
}
if isInWriteTransaction { try commitWrite() }
}

您编写的方法是同步方法,因为您没有为它指定后台队列。Invalidate()方法的目的

函数无效()描述使领域管理的所有对象、结果、链接对象和列表无效。Realm对其访问的数据版本具有读取锁定,因此在不同线程上对Realm所做的更改不会修改或删除该Realm所看到的数据。调用此方法可以释放读取锁定,从而允许磁盘上使用的空间被以后的写入事务重用,而不是增加文件。在对您以前从不再需要的Realm读取数据的后台线程执行长阻塞操作之前,应该调用此方法。从当前线程上的Realm实例获得的所有Object、Results和List实例都将无效。不能使用对象和数组。结果将变为空。Realm本身仍然有效,并且在下一次从Realm读取数据时隐式地开始新的读取事务。在没有从Realm读取任何数据的情况下,或在从未从Realm中读取任何数据之前,连续多次调用此方法是不可行的。此方法不能在只读领域上调用。

最新更新