Realm Swift线程安全变量



我是领域的新手,我想知道将对象的主键存储在视图控制器和对象作为存储属性是个好主意。

class VC: ViewController{
    public var id:Int!
    private var customer:Customer{
        get{
            return DBO.loadCustomer(for: id)
        }
    } 
}
class DBO{
    public static func loadCustomer(for id: Int) -> Customer{
        let realm = try! Realm()
        return realm.object(ofType: Customer.self, forPrimaryKey: id)!
    }
}

我假设这是因为这个应用程序将是安全的,因为每次线程都会尝试访问客户,它都会从db获取对象。但是我想知道这对于单个对象和对象数组是否有效。

与领域2.2一样,您可以使用线程安全引用(请参阅此处):

现在,您可以为所有类型的类型创建线程安全引用 以前在一个领域内的线程夹层,并在之间传递对象 线程成为一个简单的三步过程:

  1. 使用线程限制的对象初始化螺纹范围。
  2. 将该线程传递到目标线程或队列。
  3. 通过调用在目标领域上解决此参考 Realm.resolve(_ :)。使用返回的对象,如往常。

和一个代码样本,从上面的来源:

let realm = try! Realm()
let person = Person(name: "Jane") // no primary key required
try! realm.write {
  realm.add(person)
}
let personRef = ThreadSafeReference(to: person)
DispatchQueue(label: "com.example.myApp.bg").async {
  let realm = try! Realm()
  guard let person = realm.resolve(personRef) else {
    return // person was deleted
  }
  try! realm.write {
    person.name = "Jane Doe"
  }
}

但是,您的方法也应该很好。

最新更新