2017-02-16 94 views
2

我是新來的領域,我想知道是否是好主意存儲對象的主鍵在視圖控制器和對象作爲存儲屬性。領域快速線程安全變量

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

我假設這是因爲這是我的應用程序將是線程安全的,因爲每次線程試圖訪問客戶就會從數據庫中獲取對象。但我想知道這對單個對象和對象數組是否有效。

回答

1

隨着境界2.2,你可以使用線程安全的引用(見here):

現在,您可以爲所有類型的人在某個領域中 以前線程限制線程安全的引用,在 線程之間傳遞對象變成了一個簡單的三步過程:

  1. 使用線程限制對象初始化ThreadSafeReference。
  2. 將ThreadSafeReference傳遞給目標線程或隊列。
  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" 
    } 
} 

但是,你的做法也應該能正常運行。