![](/img/trans.png)
[英]Swift Realm: Thread Safe Concurrent Read and Write Index out of bounds
[英]Swift Realm Write method is Sync or Async Thread
我在我的項目中使用Realm,我想知道realm.write()
方法是否同步。 我的例子在這里:
let realm = try! Realm()
try! realm.write {
realm.delete(message)
}
realm.invalidate()
在上面的例子中,我正在刪除一個領域對象和外部大括號我寫的invalidate()
這是我的困惑:
如果write()
是同步的,那么invalidate()
就可以了
如果Async比之前寫的invalidate將調用,而realm將釋放但操作在后台運行
謝謝
Realm.write是同步的。 它只是通過一些錯誤處理調用realm.beginWrite()
/ realm.commitWrite()
:
public func write(_ block: (() throws -> Void)) throws {
beginWrite()
do {
try block()
} catch let error {
if isInWriteTransaction { cancelWrite() }
throw error
}
if isInWriteTransaction { try commitWrite() }
}
您編寫的方法是同步方法,因為您沒有為其指定后台隊列。 Invalidate()方法的目的
func invalidate()說明使Realm管理的所有對象,結果,鏈接對象和列表無效。 Realm對其訪問的數據版本保持讀鎖定,因此在不同線程上對Realm所做的更改不會修改或刪除此Realm看到的數據。 調用此方法會釋放讀取鎖定,允許磁盤上使用的空間由以后的寫入事務重用,而不是增長文件。 在對先前從您不再需要的Realm讀取數據的后台線程執行長阻塞操作之前,應調用此方法。 從當前線程上的此Realm實例獲取的所有對象,結果和列表實例均無效。 無法使用對象和數組。 結果將變空。 Realm本身仍然有效,下次從Realm讀取數據時會隱式啟動新的讀取事務。 連續多次調用此方法而不從Realm讀取任何數據,或者在從Realm讀取任何數據之前,這是一個無操作。 只能在只讀域上調用此方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.