この記事は、俺的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のプロパティとして持たせるパターンをよく見かける)