ios - RxSwift — 不卡住 UI 的后台任务

标签 ios swift multithreading rx-swift

我想在我的 iOS 应用程序的后台线程中做一些繁重的工作,而不是在执行时卡住 UI。我尝试的是:

self.someDisposable = heavyLiftingFuncReturningObservable()
            .subscribeOn(ConcurrentDispatchQueueScheduler(qos: .background))
            .observeOn(MainScheduler.instance)
            .subscribe(
                onNext: { [weak self] image in
                    // update UI
                },
                onError: { ... }
            )

为什么上面没有按预期工作以及如何让它工作?

最佳答案

我认为问题在于您对 .heavyLiftingFuncReturningObservable() 的实现,也就是说,事实上它显然开始在当前线程上工作,而不是等到被订阅并在后台调度程序上运行。解决方案是在 .heavyLiftingFuncReturningObservable() 函数内部使用 .deferred()

参见 http://adamborek.com/top-7-rxswift-mistakes/

关于ios - RxSwift — 不卡住 UI 的后台任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47202391/

相关文章:

iphone - 从 super View 中删除所有实例

ios - 在方案而不是目标中设置构建变量

swift - 为类属性生成值

java - 安卓/Java。 AsyncTask/Thread 在我需要时将数据传递回 UI(不仅在执行前/执行后)

java - session 和事务的线程使用导致内存泄漏?

ios - UIButton 添加目标选择器不起作用

ios - 将具有枚举值的 Swift 字典转换为 NSDictionary

ios - 如何在 swift 中使用带有结构的嵌套 json

ios - Swift:我的便利 init 没有看到正常的 init

multithreading - 如果我从单独的线程调用它,为什么我的代码运行速度会变慢?