簡體   English   中英

Swift Realm Write方法是Sync或Async Thread

[英]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()

這是我的困惑:

  1. 如果write()是同步的,那么invalidate()就可以了

  2. 如果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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM