ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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 에서 지정한 쓰레드를 사용한다.

    댓글

Designed by Tistory.