2017-04-05 106 views
2

结合数据当试图结合我UITextField这是在我的ViewController具有可变var location = Variable<String?>("")这是我的ViewControllerViewModel使用rxSwift在我收到关于内存泄漏的信息。我这样做波纹管:内存泄漏,同时用rxSwift

我的ViewController

class ViewController { 

    @IBOutlet weak var locationTextField: UITextField! 
    var viewControllerViewModel: ViewControllerViewModel? 
    lazy var disposeBag = DisposeBag() 
    /* 
     Another variables etc. 
    */ 

    override func viewDidLoad() { 
    super.viewDidLoad() 

     bindDataWithViewModel() 
    } 

    func bindDataWithViewModel() { 
     if let viewModel = viewControllerViewModel { 
      locationTextField.rx.text.bindTo(viewModel.location).disposed(by: disposeBag) -> // here shows memory leak 
     } 
    } 
} 

我ViewControllerViewModel

class ViewControllerViewModel { 

    var location = Variable<String?>("") 
    var infoStruct = InfoStruct() 
    lazy var disposeBag = DisposeBag() 

    init() { 
     initValueObservable() 
    } 

    func initValueObservable() { 
     location.asObservable().subscribe(onNext: { [unowned self] text in 
     self.infoStruct.location = text 
    }).addDisposableTo(disposeBag) 
    } 
} 

你有任何想法,为什么这种内存泄漏造成自身哪有我避开它?

回答

0
func bindDataWithViewModel() { 

    if let viewModel = viewControllerViewModel { 
     locationTextField.rx.text.orEmpty 
      .bindTo(viewModel.location) 
      .addDisposableTo(disposeBag) // use addDisposableTo 
    } 
} 
+1

'addDisposableTo'是一个不推荐的方法 –