[英]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.