2017-02-16 12 views
2

Я новичок в Realm, и мне интересно, стоит ли хранить первичный ключ объекта в контроллере View и объекте в качестве хранимого свойства.Realm swift thread safe variable

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

На Realm 2.2 вы можете использовать поточно-ссылку (см here):

Теперь вы можете создать поточно-ссылку для всех типов, которые были ранее нить локализованными в Realm, и передачи объектов между нитями становится простым, трехступенчатый процесс:

  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" 
    } 
} 

Но ваш подход должен работать нормально.