rxswift块的生命周期

时间:2019-08-29 11:09:42

标签: ios rx-swift

我有一个像这样的viewmode类:

class ViewMode {
 let validateCountResult: Driver<Bool>
 init(username: Driver<String>) {
     validateCountResult = username
            .flatMapLatest { username in
                return // validate username
    }
}

我有一个UIViewController的子类,如下所示:

class ViewController : UIViewController{
  override func viewDidLoad() {
        super.viewDidLoad()
        let viewmode = 
        ViewMode(textfiled.rx.texttext.orEmpty.asDriver())
        viewmode.validateCountResult.drive(onNext:{
          // TODO Something
           FuncA()
         })
   }
}

当viewDidload完成时,我相信viewmode也应该取消初始化。但是我看到绑定仍然存在,并且FuncA仍然被调用!

为什么会这样?

2 个答案:

答案 0 :(得分:0)

了解绑定的最简单方法是将关系视为两个实体之间的连接: 生产者,产生价值。 接收者,处理来自生产者的值。 接收者无法返回值。这是使用RxSwift绑定时的一般规则。 绑定的基本功能是bind(to :),要将可观察对象绑定到另一个实体,要求接收者遵守ObserverType。

答案 1 :(得分:0)

您应该通过创建Disposable来处置DisposeBag类型。

如果不这样做,就不会保证viewController甚至会取消初始化,也不会丢弃您的可丢弃类型。他们通过您的ViewMode一起创造了一个像人类一样的胎儿,所有三个对象都保留在内存中。

看看this文章,了解如何查找内存泄漏。