thread 和 Realm 怎么处理? (iOS)

How to deal with thread and Realm ? (iOS)

我使用 Realm 来存储我的模型对象。在我的对象中,我有一个函数,它根据自己的属性值生成 NSData。这一代可能会很长,所以我想在一个 线程中生成我的 NSData 和处理程序块 .

我的问题是 Realm 数据访问只能在 Realm 创建实体(实际上是主线程)上进行。因此,当我在线程中访问我的 RealmObject 属性时,应用程序崩溃。根据 Realm 规范,这是正常的。但是,根据 Realm 限制在线程中生成 NSData 的最佳解决方案是什么?

其实我有两个想法:

我假设很多Realm用户需要处理线程和Realm,那么你在这种情况下做了什么?

将对象 ID 传递给单独线程中 运行 的代码。在该线程中创建一个 Realm 实例 (let realm = try! Realm()) 并检索您的对象。然后你可以做你的长生成和 return 带有回调的结果。

let objectId = "something"
dispatch_async(queue) {
  let realm = try! Realm()
  let myObject = realm.objectForPrimaryKey(MyObject.self, key: objectId)
  let result = myObject.longOperation()

  // call back with results
}

let objectRef = ThreadSafeReference(to: myObject)
DispatchQueue(label: "background").async {

   autoreleasepool {
        let realm = try! Realm()
        guard let myObject = realm.resolve(objectRef) else {
            return // object was deleted
        }

        let result = myObject.longOperation()
        // call back with results
   }
}