調度器(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)