この記事は、俺的RxSwiftまとめ①,俺的RxSwiftまとめ②,俺的RxSwiftまとめ③(Observableとは何か?)の続きです。
始め方はsubscribe
/終わらせ方はdispose bag
Observable
の特徴として、「3つのイベント(next/error/completed
)を持ち、subscribeすることでそれらの要素を取り扱えるようになる」というものがあった。
始め方はsubscribe
があるが、終わらせ方はどのようにすれば良いのか?それは、下記の3通りが考えられる。
-
error
イベントが流れてくる -
completed
イベントが流れてくる -
disposebag
(ゴミ袋)にobservarble
を追加する
今回は、3番目のdispose bag
について詳しく記す。
disposebag
とは何なのか?
observable
をまとめて破棄するためのゴミ袋
なぜ必要なのか?
observable
の中には、completed
やerror
を流したくないものがある(ex:〇〇)。その場合は、observable
に備わっているdispose
メソッドを用いて、明示的にobservable
を完了させる(≒廃棄する)必要がある。(完了させないと、永遠にsubscribe
状態になり、メモリリークの原因となってしまうため。)
その際、observable
個別にdispose
メソッドを使う代わりに、管理コストを抑えるためにobservable
をまとめて入れるdisposebag
をインスタンスのプロパティとして持たせておいて、インスタンス破棄のタイミングで全てのobservable
をdispose
することができる(ViewController
のプロパティとして持たせるパターンをよく見かける)