我是Realm的新手,我想知道将对象的主键存储在View控制器和对象中作为存储属性是否是个好主意。
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获取对象。但我想知道这对单个对象和对象数组是否有效。
答案 0 :(得分:1)
从Realm 2.2开始,您可以使用线程安全引用(请参阅here):
现在,您可以为所有类型创建线程安全引用 以前线程限制在一个Realm中,并在它们之间传递对象 线程变成一个简单的三步过程:
- 使用线程限制对象初始化ThreadSafeReference。
- 将ThreadSafeReference传递给目标线程或队列。
- 通过调用在目标Realm上解析此引用 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"
}
}
但是,你的方法也应该可以正常工作。