簡體   English   中英

DispatchQueue.main.async 如何存儲它的塊

[英]How does DispatchQueue.main.async store it's blocks

我有一個類似的代碼:

func fetchBalances() -> Observable<Result<[User], Error>> {

    Observable.create { observer in
        
        var dataChangeDisposable: Disposable?
        DispatchQueue.main.async {

            let realm = try! Realm()
            let user = realm.objects(UserData.self)
            dataChangeDisposable = Observable.collection(from: user)
                .map { $0.map { UserData.convert($0) } }
                .subscribe(onNext: {
                    observer.onNext(.success($0))
                })
        }

        return Disposables.create {
            dataChangeDisposable?.dispose()
        }
    }
}

我需要使用一些帶有運行循環的線程來維護對 Realm 數據庫的訂閱(Realm 的限制)。 現在我正在使用 DispatchQueue.main.async {} 方法,我注意到訂閱一直保持活動狀態,DispatchQueue.main 如何存儲它提交的塊,如果 Observable 銷毀是否意味着我在內存中泄漏塊?

發送到調度隊列的塊在執行后立即被刪除。 它根本不會存儲很長時間。

如果您的訂閱“一直有效”,那是因為它沒有被正確處理。 可能這里發生的事情是發送到Disposables.create的塊在dataChangeDisposable包含值之前被調用。

通過將代碼更改為以下內容來測試我的假設:

return Disposables.create {
    dataChangeDisposable!.dispose()
}

如果您的應用程序因為dataChangeDisposable為零而崩潰,那么這就是您的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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