2017-07-06 46 views
0

當我使用RxSwift時,我必須寫很多很多addDisposableTo,我該如何刪除它?我如何刪除「addDisposableTo」當我使用RxSwift

usernameTextField.rx.text.orEmpty 
      .bindTo(viewModel.username) 
      .addDisposableTo(disposeBag) 

    passwordTextField.rx.text.orEmpty 
     .bindTo(viewModel.password) 
     .addDisposableTo(disposeBag) 

    repeatPasswordTextField.rx.text.orEmpty 
     .bindTo(viewModel.repeatPassword) 
     .addDisposableTo(disposeBag) 
+3

但你必須使用它。當你訂閱時,你做了一個「訂閱」,當你不再需要時,你應該退訂訂閱('subscribe','bindTo'方法返回一個稱爲「一次性」的訂閱) - 這都是關於所有權。您可以手動調用'dispose'來返回一次性消息,或者您可以依賴一個DisposeBag,它將在其deinit方法中爲所有內部訂閱調用'dispose' - 這會更好,然後手動管理它們。 – Nimble

回答

1

正如Nimble指出的那樣,你必須這樣做;否則你肯定會泄漏內存。工作中的訂閱/取消訂閱夫婦依賴於原生Swift通知中心/ KVO觀察員的原則:如果您打開「頻道」,則必須「關閉」它。

這裏的中間地帶是使用NSObject-Rx(由Ash Furrow)阻止你在NSObject子到處創建一個dispose包你import RxSwift:只需撥打.disposed(by: rx.disposeBag)

1

我創建了一個代碼片段XCode中的申購代碼,因此它非常方便,我沒有給它的每一次

恐怕類型,因爲在處置袋是屬性與訂閱對象綁定的屬性在鍋爐板代碼方面沒有太多可以節省的空間。

可能你可以寫一個方便的包裝,但它仍然值得嗎?在我看來,XCode代碼片段很好用