簡體   English   中英

rxswift 塊生命周期

[英]rxswift block life cycle

我有一個這樣的視圖模式類:

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 仍然被調用!

為什么會這樣?

理解綁定的最簡單方法是將關系視為兩個實體之間的連接:生產者,產生值。接收者,處理來自生產者的值。 接收者不能返回值。 這是使用 RxSwift 綁定時的一般規則。 綁定的基本功能是 bind(to:),要將一個 observable 綁定到另一個實體,需要接收者符合 ObserverType。

您應該通過創建DisposeBag來處理您的Disposable類型。

如果您不這樣做,則無法保證您的 viewController 甚至 deinits 或您的一次性類型也會被處理。 它們通過您的ViewMode一起創建一個類似的對象,並且所有三個對象都保留在內存中。

看看這篇文章,看看如何找到內存泄漏。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM