gpt4 book ai didi

ios - DispatchQueue.main.async如何存储它的 block

转载 作者:行者123 更新时间:2023-12-01 16:11:18 24 4
gpt4 key购买 nike

我有类似的代码:

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 {}方法,我注意到订阅一直保持 Activity 状态,DispatchQueue.main如何存储它的提交块,如果Observable销毁了,这是否意味着我在内存中泄漏了块?

最佳答案

执行后立即删除发送到调度队列的块。它根本没有存储很长时间。
如果您的订阅“一直保持 Activity 状态”,那是因为未正确处理它。此处可能发生的情况是,在Disposables.create包含值之前,已调用了发送到dataChangeDisposable的块。
通过将代码更改为以下内容来检验我的假设:

return Disposables.create {
dataChangeDisposable!.dispose()
}
如果您的应用程序由于 dataChangeDisposable为nil而崩溃,那就是您的问题。

关于ios - DispatchQueue.main.async如何存储它的 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63832224/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com