RxSwiftが使われているソースを見る,使う機会が増えて来たので、 Hot/Coldの概念を理解したいと思い立ち調べた内容のメモ書きを残す。
※言い訳なのですが、これは自分専用のメモなのでパッと見で理解しづらいと思いますがご了承ください。
※あくまで概要のメモなので詳細内容、ソースなどの記載はありません。詳細を見たい方は今日こそ理解するHot/Coldを参照ください。
Hot/Coldの性質メモ
Hot/ColdはObservableの性質
- Subject: Hot
- Operator: ほとんどがCold(一部Hotがある)
ストリームが流れる契機
- Hot: subscribeされなくてもストリームが流れる
- Cold: subscribeされて初めてストリームが流れる
Hot/Coldの組み合わせ
- HotのObservableをColdがsubscribeした場合は、subscribeされないとストリームが流れない
- ColdのObservableをHotがsubscribeした場合は、subscribeされなくてもストリームが流れる
Hot/Coldをsubscribeした際のストリームの分岐挙動
- Hot: 一つのObservable(ストリーム)を複数のObserverでsubscribeできる
- ストリームは一つのまま
- Observableのスコープ内はストリームの数(=一度)しか実行されない
- Cold: 一つのObservable(ストリーム)を一つのObserverしかsubscribeできない
- 複数のObserverがsubscribeした場合は、Observerの数分だけストリームが生成される
- Observableのスコープ内はストリームの数(=Observerの数分)だけ実行される
Hot/ColdのObservableのストリーム共有
- Hot: 各Observerに対して同じストリームが共有されるため同じイベントが流れる
- subscribe以降、すでに流れた過去のイベントは流れない
- Cold: ColdなObservableは一つのObserverしか持てない(ストリームが共有されない)のでObserverの数分だけイベントが流れる