[英]Swift Realm: Thread Safe Concurrent Read and Write Index out of bounds
[英]Swift Realm Write method is Sync or Async Thread
我在我的项目中使用Realm,我想知道realm.write()
方法是否同步。 我的例子在这里:
let realm = try! Realm()
try! realm.write {
realm.delete(message)
}
realm.invalidate()
在上面的例子中,我正在删除一个领域对象和外部大括号我写的invalidate()
这是我的困惑:
如果write()
是同步的,那么invalidate()
就可以了
如果Async比之前写的invalidate将调用,而realm将释放但操作在后台运行
谢谢
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()方法的目的
func invalidate()说明使Realm管理的所有对象,结果,链接对象和列表无效。 Realm对其访问的数据版本保持读锁定,因此在不同线程上对Realm所做的更改不会修改或删除此Realm看到的数据。 调用此方法会释放读取锁定,允许磁盘上使用的空间由以后的写入事务重用,而不是增长文件。 在对先前从您不再需要的Realm读取数据的后台线程执行长阻塞操作之前,应调用此方法。 从当前线程上的此Realm实例获取的所有对象,结果和列表实例均无效。 无法使用对象和数组。 结果将变空。 Realm本身仍然有效,下次从Realm读取数据时会隐式启动新的读取事务。 连续多次调用此方法而不从Realm读取任何数据,或者在从Realm读取任何数据之前,这是一个无操作。 只能在只读域上调用此方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.