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
- 리펙토링
- UICollectionView
- 스위프트
- SWIFT
- Human interface guide
- 애니메이션
- RxCocoa
- UITextView
- ribs
- uitableview
- 클린 코드
- uiscrollview
- 리펙터링
- ios
- tableView
- swiftUI
- HIG
- collectionview
- combine
- clean architecture
- Protocol
- Xcode
- Observable
- map
- rxswift
- Clean Code
- MVVM
- Refactoring
- 리팩토링
- swift documentation
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