2017-07-06 23 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代码片段很好用