繁体   English   中英

Swift Realm Write方法是Sync或Async Thread

[英]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()

这是我的困惑:

  1. 如果write()是同步的,那么invalidate()就可以了

  2. 如果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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM