-
Rxswift - ObserveOn , SubscribeOn개발/Swift 2022. 11. 18. 16:03
Observable의 쓰레드를 변경시키는 두가지방법이 있다.
일반적으로 별도의 설정 없이는
“구독한 시점에서의 쓰레드” 를 사용한다.
//Main Thread에서 productList Observable 생성 output.productList .bind(to: productListTableView.rx.items(cellIdentifier: "ProductListCell", cellType: ProductListTableViewCell.self)) {[weak self] (_, element, cell) in print("Thread.isMainThread \\(Thread.isMainThread)") //→ 메인스레드 true cell.configure(id: element.id, nameKo: element.nameKo, nameEn: element.nameEn, price: element.price, supplier: element.supplier?.name) self?.loadingView?.removeFromSuperview() } .disposed(by: disposeBag)
해당 쓰레드를 변경하고 싶을때 observeOn을 사용한다.
output.productList .observe(on: ConcurrentDispatchQueueScheduler(qos: .userInteractive)) .map({ _ in print("Thread.isMainThread \\(Thread.current.isMainThread)") }) .observe(on: MainScheduler.instance) .map({ _ in print("Thread.isMainThread \\(Thread.current.isMainThread)") }) .subscribe() .disposed(by: disposeBag)
첫번째 map 에서는 Main → false
두번째 map Main → true 가 떨어진다.
observeOn 하위에 영향을 주는것을 알수있고
다시 observeOn을 통해 쓰레드가 변경될수도 있다.
subscribeOn은 sequence가 생성될때
쓰레드를 지정한다.
sequence가 생성되는 시점은 subscribe()가 호출 되는 시점이다.
Observable.create{ observer in //여기에 영향을 줌 } .subscribe { //여기 영향 X }
subscribe에서는 observeOn한 쓰레드를 사용하고
Observable 을 생성하고있는 create 클로져 에서
subscribeOn 에서 지정한 쓰레드를 사용한다.
'개발 > Swift' 카테고리의 다른 글
Closure 의 Capture 와 Self (0) 2022.11.21 DispatchQueue 에서 주의할 데드락 현상 (0) 2022.11.21 Rxswift 에러 핸들링 (complete, dispose 대응) (0) 2022.11.18 [Combine] - 1. publisher & subscriber (0) 2022.11.13 Rxswift operators - flatmap, flatmapLatest, merge (0) 2022.11.11