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 | 31 |
Tags
- UITextView
- clean architecture
- ribs
- 스위프트
- SWIFT
- MVVM
- 리펙터링
- collectionview
- Human interface guide
- combine
- tableView
- swift documentation
- 클린 코드
- UICollectionView
- 리팩토링
- Xcode
- Protocol
- Refactoring
- Observable
- 애니메이션
- HIG
- uiscrollview
- Clean Code
- uitableview
- rxswift
- swiftUI
- map
- ios
- 리펙토링
- RxCocoa
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - Swift] subscribe(on:)와 observe(on:)의 차이 (RxSwift) 본문
사전 지식
- 아래 코드에서 1번과 2번 중 subscription 영역과 observing 영역을 구분하면?
- 1번 - subscription 영역
- 2번 - observing 영역
Observable<Int>
.create { observer in
// 1.
}
.subscribe(onNext: { _ in
// 2.
})
.disposed(by: disposeBag)
subscribe(on:)와 observe(on:)
- subscribe(on:)은 subscription영역에 대한 스레드를 의미
- observe(on:)은 observing영역에 대한 스레드를 의미
테스트
- 메인 스레드에서 아래 코드 호출
- subscription영역과 observing영역은 main thread
Observable<Int>
.create { observer in
observer.onNext(1)
print("1", Thread.isMainThread) // true
return Disposables.create()
}
.subscribe(onNext: { _ in
print("2", Thread.isMainThread) // true
})
.disposed(by: disposeBag)
- subscription영역을 백그라운드 스레드로 바꾸는 subscribe(on:)을 추가할 경우
- subscription영역이 background로 되므로 아래 observing도 background로 변경
Observable<Int>
.create { observer in
// subscription 영역
observer.onNext(1)
print("1", Thread.isMainThread) // false
return Disposables.create()
}
.subscribe(on: ConcurrentDispatchQueueScheduler.init(qos: .background))
.subscribe(onNext: { _ in
// observing 영역
print("2", Thread.isMainThread) // false
})
.disposed(by: disposeBag)
- observing 영역을 메인 스레드로 바꾸는 observe(on:)을 추가할 경우
- observing 영역의 스레드는 main으로 변경
Observable<Int>
.create { observer in
// subscription 영역
observer.onNext(1)
print("1", Thread.isMainThread) // false
return Disposables.create()
}
.subscribe(on: ConcurrentDispatchQueueScheduler.init(qos: .background))
.observe(on: MainScheduler.asyncInstance)
.subscribe(onNext: { _ in
// observing 영역
print("2", Thread.isMainThread) // true
})
.disposed(by: disposeBag)
- observe(on:)이 subscribe(on:)위에 있어도 당연히 위와 동일한 결과
Observable<Int>
.create { observer in
// subscription 영역
observer.onNext(1)
print("1", Thread.isMainThread) // false
return Disposables.create()
}
.observe(on: MainScheduler.asyncInstance)
.subscribe(on: ConcurrentDispatchQueueScheduler.init(qos: .background))
.subscribe(onNext: { _ in
// observing 영역
print("2", Thread.isMainThread) // true
})
.disposed(by: disposeBag)
* 참고
'iOS 응용 (swift)' 카테고리의 다른 글
Comments