LoginSignup
0
0

More than 5 years have passed since last update.

摸摸看 RxSwift - DisposeBag, 在 RX 中一個類似於 ARC 的機制

Last updated at Posted at 2017-03-02

在每一段 RxSwift 在 subscribe (訂閱、註冊,也就是開始觀察變化)的時候,最後都會出現一段

.addDisposableTo(disposeBag)

或是比較新的寫法(也是官方建議的寫法 - CHANGELOG - 3.2.0

.disposed(by: disposeBag)

這篇就是要說這個 DisposeBag 是什麼東西。

因為才剛始接觸 RxSwift ,如果有錯誤的地方,歡迎透過 edit request 或是下面留言提出來,謝謝。

袋子

DisposeBag

從字面上來看,他就是一個袋子。 他是個有著類似於 ARC 的機制的類別,並具備 thread safe 的特性。

DisposeBag 這個類別是隸屬於 RxSwift ,所以也需要 import 這個 module 進到使用的檔案,通常會和 RxCocoa 這個 module 一併引入。

用途

他就是拿來裝可以被丟掉 (disposable) 的物件

釋放

在 DisposeBag 被釋放前,也就是他自己的 deinit 方法,這個袋子裡面裝的 disposables 就會被釋放掉了。

使用

在使用的時候,通常會有個 instance property 來放這個參數。

var disposeBag = DisposeBag()

手動釋放

如果不想要等到 disposeBag 所在物件的生命週期結束才釋放,可以選擇手動將原本的 disposeBag 替換成新的 instance 即可:

self.disposeBag = DisposeBag()

在沒有 memory leak/ retain cycle 的情形之下,原本的 DisposeBag 物件就會被 ARC 回收、自然而然會呼叫 deinit 把所握有的資源全部釋放掉。

參考

這篇在這裡也可以看

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0