2017-01-20 178 views
0

我有一個RESTfulAPI我從中檢索一大組數據。我堅持在本地使用它的境界以下電話:處理領域交易

func addObjectType(object: ObjectType){ 
    // Check for existence of data 
    if (realm.object(ofType: ObjectType.self, forPrimaryKey: object.id) == nil) { 
     // Persist your data easily 
     try! realm.write { 
      realm.add(object) 
     } 
    } 
} 

該應用程序有一個特點,在本地刪除數據。我已經實現了它作爲以下

func deleteAllData() { 
    if(!realm.isEmpty){ 
     do{ 
      if(!realm.isInWriteTransaction) { 
       realm.beginWrite() 
       realm.deleteAll() 
       try! realm.commitWrite() 
      } 
     } 
     NotificationCenter.default.post(name: Notification.Name("updateUI"), object: nil) 
    } 
} 

然而,看着領域文檔我看到以下內容:

表示境界當前是否處於寫事務。

警告

不要簡單地檢查這個屬性,然後每當需要創建,更新或刪除對象開始寫事務 。這樣做 可能會導致大量的寫入事務被創建, 會降低性能。相反,在單次交易中,始終更願意執行多個更新 。

我的實施是否正確?

我覺得我缺少一些檢查 ..

+0

完成添加/更新寫入後,您應該始終'commitWrite',不需要檢查'isInWriteTransaction',領域說不需要檢查,因爲它會降低性能 – Tj3n

+0

我應該這樣做,當我添加一個新的通過寫入對象? (請參閱addObjectType的第一個方法) – mm24

+0

如果您使用write關閉,則不需要調用它,但檢查'isInWriteTransaction'在大多數情況下是超級警告,因爲它們具有寫入關閉 – Tj3n

回答

0

領域的一般經驗法則規則是,你應該嘗試,你可以儘可能多寫交易減少。這包括在一個塊內將多個寫入一起批處理,並且如果日期實際上沒有改變,則儘量避免所有事務一起進行。

領域寫事務在獨立的線程上是獨立的。如果後臺線程正在執行寫入事務,則其他線程上的所有其他事務將被阻止。因此,除非寫入事務在該特定線程上打開,否則無需檢查isInWriteTransaction

所以,不,你不會錯過任何額外的檢查。只要您沒有意外地將寫事務留在其他地方,您甚至可以減少您在那裏獲得的支票數量。 :)