调度器(Schedulers)
调度器(Schedulers)是 RxSwift 实现多线程的核心模块,它主要用于控制任务在哪个线程或队列运行.
RxSwift
中的几种 Scheduler
CurrentThreadScheduler
:表示当前线程Scheduler
。(默认使用这个)MainScheduler
:表示主线程。如果我们需要执行一些和 UI 相关的任务,就需要切换到该 Scheduler 运行。SerialDispatchQueueScheduler
:封装了 GCD 的串行队列。如果我们需要执行一些串行任务,可以切换到这个Scheduler
运行。ConcurrentDispatchQueueScheduler
:封装了 GCD 的并行队列。如果我们需要执行一些并发任务,可以切换到这个Scheduler
运行。OperationQueueScheduler
:封装了NSOperationQueue
。
RxSwift 使用 subscribeOn
与 observeOn
来实现线程切换
subscribeOn()
- 决定数据序列的构建函数在哪个 Scheduler 上运行
observeOn()
- 决定在哪个 Scheduler 上监听这个数据序列
使用样例
后台发起网络请求,然后解析数据,最后在主线程刷新页面
使用系统 GCD 来实现
// 现在后台获取数据
DispatchQueue.global(qos: .userInitiated).async {
let data = try? Data(contentsOf: url)
// 再到主线程显示结果
DispatchQueue.main.async {
self.data = data
}
}
使用 RxSwit 来实现
let rxData: Observable<Data> = ...
rxData
.subscribeOn(ConcurrentDispatchQueueScheduler(qos: .userInitiated)) // 后台构建序列
.observeOn(MainScheduler.instance) // 主线程监听并处理序列结果
.subscribe(onNext: { [weak self] data in
self?.data = data
})
.disposed(by: disposeBag)