Mar*_*ina 5 ios swift rx-swift
当我开始使用RxSwift时,我曾经BaseViewController使用RxSwift在我所有的控制器上创建和扩展它.BaseViewController.swift的代码:
class BaseViewController: UIViewController {
var mSubscriptions: CompositeDisposable?
func addSubscription(subscription: Disposable){
if(mSubscriptions == nil){
mSubscriptions = CompositeDisposable()
}
if let mSub = mSubscriptions{
mSub.addDisposable(subscription)
}
}
func unsubscribeAll(){
if let mSub = mSubscriptions{
mSub.dispose()
mSubscriptions = nil
}
}
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
unsubscribeAll()
}
deinit{
unsubscribeAll()
}
}
Run Code Online (Sandbox Code Playgroud)
我在我的子控制器中使用addSubscription(:_)方法.例如,一段代码来自:
class TasksViewController: BaseViewController{
overrided func viewWillAppear(){
//...
var subscribe = dataLoader.load(requestNetwork, dataManager: taskDataManager)
.observeOn(ConcurrentDispatchQueueScheduler(queue: queue))
.subscribe({ (event) -> Void in
//...
})
addSubscription(subscribe!)
}
}
Run Code Online (Sandbox Code Playgroud)
如果我不使用BaseViewController并DisposeBag()在每个控制器中创建一个实例并将我的所有订阅添加到该disposeBag,该怎么办?我应该如何对待一次性用品?
sol*_*ell 11
您只需let disposeBag = DisposeBag()向视图控制器添加属性即可.Disposable只需添加s就可以了. DisposeBag就像一个CompositeDisposeBag会dispose在Disposable给你的时候DisposeBag被释放(在时会发生UIViewController被释放).无需手动管理.
但是,如果需要,可以继续使用子类:
class BaseViewController: UIViewController {
let disposeBag = DisposeBag()
}
Run Code Online (Sandbox Code Playgroud)
然后使用它:
override func viewDidLoad() {
super.viewDidLoad()
Observable.just(42)
.subscribeNext { i in
print(i)
}
.addDisposableTo(disposeBag)
}
Run Code Online (Sandbox Code Playgroud)
这实际上是ViewController基类的作用RxExample:
如果你真的想要能够手动释放所有内容(就像你正在使用的那样unsubscribeAll),那么你可以设置disposeBagto nil或new DisposeBag来解除分配:disposeBag = DisposeBag()或者disposeBag = nil.
| 归档时间: |
|
| 查看次数: |
2024 次 |
| 最近记录: |