【问题标题】:Swift Realm Write method is Sync or Async ThreadSwift Realm Write 方法是 Sync 或 Async Thread
【发布时间】:2017-01-13 08:49:28
【问题描述】:

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

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

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

这是我的困惑:

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

  2. 如果 Async 比之前写入无效将调用,并且领域将释放但操作在后台运行

谢谢

【问题讨论】:

    标签: ios swift realm


    【解决方案1】:

    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() }
    }
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-09
        • 1970-01-01
        • 1970-01-01
        • 2016-07-05
        相关资源
        最近更新 更多