Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- appstore
- 웹뷰
- Firebase
- github
- rxswift
- Realm
- Code
- Session
- Archive
- error
- FLUTTER
- Swift
- darkmode
- view
- stack
- IOS
- Git
- UIButton
- MacOS
- Apple
- 개발자
- window
- Xcode
- Python
- JPA
- mac
- Notification
- SwiftUI
- 한글
- iOS16
Archives
- Today
- Total
EEYatHo 앱 깎는 이야기
RxSwift ) 스케쥴러, Subscribe(on:), observe(on:) - EEYatHo iOS 본문
iOS, Swift/Swift Theory
RxSwift ) 스케쥴러, Subscribe(on:), observe(on:) - EEYatHo iOS
EEYatHo 2023. 2. 13. 17:11반응형
RxSwift 의 Scheduling
RxSwift 에서 제공하는 스케쥴러(쓰레드) 관리 API 는 2가지
- subscribe(on: Scheduler) subscribeOn is deprecated and renamed
- observe(on: Scheduler) observeOn is deprecated and renamed
subscribe(on:)
- operator chain 의 어디에서 호출하든 모든 closure 의 Scheduler 설정.
- 여러개를 호출할 경우, 맨 처음(맨 위)의 subscribe(on:) 만 적용됨.
- subscribe(on:)이 없으면, create {} 는 관찰하는 곳(subscribe()이 호출된 곳)에서 호출된다.
여기서 정해진 Scheduler는, observe(on:)이 나오기 전까지 유지된다.
Observable<[Int]>.create { observer in
// create closure
// subscribe 되는 순간 observable 생성 및 클로저 실행
print(Thread.isMainThread)
observer.onNext([1,2,3])
return Disposables.create {}
}
// 이 subscribe(on:)으로, 모든 closure이 메인쓰레드가 아닌 곳에서 실행됨
.subscribe(on: ConcurrentDispatchQueueScheduler(qos: .background))
// 이 subscribe(on:)은 무시됨.
.subscribe(on: MainScheduler.instance)
.map {
// map closure
print(Thread.isMainThread)
}
.subscribe { event in
// observe closure
print(Thread.isMainThread)
}
.disposed(by: disposeBag)
// false
// false
// false
observe(on:)
- 호출한 시점 아래 closure 들의 Scheduler 설정
Observable<[Int]>.create { observer in
// create closure
// subscribe 되는 순간 observable 생성 및 클로저 실행
print(Thread.isMainThread)
observer.onNext([1,2,3])
return Disposables.create {}
}
// create closure 의 Scheduler 설정
.subscribe(on: MainScheduler.instance)
// map closure 의 Scheduler 설정
.observe(on: ConcurrentDispatchQueueScheduler(qos: .background))
.map {
// map closure
print(Thread.isMainThread)
}
// observe closure 의 Scheduler 설정
.observe(on: MainScheduler.instance)
.subscribe { event in
// observe closure
print(Thread.isMainThread)
}
.disposed(by: disposeBag)
이미지를 통한 이해
- 파란색 subscribe(on:)으로, 처음엔 파란색 스케쥴러 (전체 적용)
- 주황색 observe(on:)으로, 중간부분은 주황색 스케쥴러
- 분홍색 observe(on:)으로, 마지막은 분홍색 스케쥴러
Reference
https://levenshtein.tistory.com/471
'iOS, Swift > Swift Theory' 카테고리의 다른 글
Swift ) Lazy - EEYatHo iOS (0) | 2023.02.14 |
---|---|
Swift ) frame, bounds - EEYatHo iOS (0) | 2023.02.13 |
Swift ) Swift 5.7 변경사항 - EEYatHo iOS (0) | 2023.02.06 |
Swift ) async/await - EEYatHo iOS (0) | 2023.01.16 |
Swift ) Concurrency, Thread, GCD - EEYatHo iOS (0) | 2023.01.12 |
Comments