俺的RxSwiftまとめ④(disposebagとは?)


この記事は、俺的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の中には、completederrorを流したくないものがある(ex:〇〇)。その場合は、observableに備わっているdisposeメソッドを用いて、明示的にobservableを完了させる(≒廃棄する)必要がある。(完了させないと、永遠にsubscribe状態になり、メモリリークの原因となってしまうため。)

その際、observable個別にdisposeメソッドを使う代わりに、管理コストを抑えるためにobservableをまとめて入れるdisposebagをインスタンスのプロパティとして持たせておいて、インスタンス破棄のタイミングで全てのobservabledisposeすることができる(ViewControllerのプロパティとして持たせるパターンをよく見かける)