【问题标题】:memory leak while binding data with rxSwift使用 rxSwift 绑定数据时发生内存泄漏
【发布时间】:2017-08-31 13:52:21
【问题描述】:

当我尝试使用rxSwift 将我的ViewController 中的UITextField 与我的ViewControllerViewModel 中的变量var location = Variable<String?>("") 绑定时,我收到有关内存泄漏的信息。我这样做如下:

我的视图控制器

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)
    }
}

您知道为什么会出现这种内存泄漏以及如何避免它吗?

【问题讨论】:

  • 我有同样的问题是当我使用 textField.rx.text 资源计数总是增加。有关更多详细信息,我的测试用例是我有 2 个屏幕是 A 和 B。在 A 处,资源计数为 56。当我推送到 B(B 有一个 TextField 并且我使用 textField.rx.text )并返回到 A 时,资源计数为 60。每次我推回时它会增加 4。有人可以解释一下吗?

标签: swift xcode memory-leaks instruments rx-swift


【解决方案1】:
func bindDataWithViewModel() {

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

【讨论】:

  • addDisposableTo 是一种已弃用的方法
猜你喜欢
  • 2019-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-29
  • 2022-07-14
  • 1970-01-01
  • 2014-12-11
相关资源
最近更新 更多