Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

When should we call addDisposableTo(disposeBag) in RxSwift?

We create a DisposeBag, and a Observable, subscribe the Observable and then addDisposableTo(disposeBag), I know when the DisposeBag is going to deinit, it will call dispose() to release resources otherwise it will lead memory leak.

If the Observable send Complete or Error that terminate in finite time. When the Observable terminate before DisposeBag deinit, do I have the need to call addDisposableTo(disposeBag)? Does DisposeBag automatically release the observer that subscribed to it when it received terminated message?

let disposeBag = DisposeBag()

Observable.just("🔴")
    .subscribe { event in
        print(event)
    }
    .addDisposableTo(disposeBag)

Should I have to .addDisposableTo(disposeBag) explicitly? I think after sending "🔴", the Observable will terminate and releasing the observer?

like image 240
leizh00701 Avatar asked Jun 09 '16 11:06

leizh00701


1 Answers

If you are certain that the observable completes in a deterministic way - like using just in your example, or using take, takeUntil, etc. -, you may choose to not use the DisposeBag.

You might get a compiler warning, that actually explains this behavior well and how to work around it. But in general, it is more future-proof if you use DisposeBag anyway.

See: Unused disposable warning

like image 60
vzsg Avatar answered Nov 15 '22 21:11

vzsg