RxSwift绑定数据到UIButton内存泄漏

时间:2017-02-28 16:56:29

标签: ios swift memory-leaks rx-swift

我正在运行仪器来检查内存泄漏,并且在将此observable与UIButton标题绑定时,我发现内存泄漏。知道我做错了什么或我如何解决这个问题?

override func viewDidLoad() {
...
viewModel?.menuData.asObservable().subscribe(onNext: setupTopMenu).addDisposableTo(disposeBag)
...
}

func setupTopMenu(items: [MenuItemViewModel]) {
        topMenuStackView.subviews.forEach({ $0.removeFromSuperview() })
        for (i, item) in items.enumerated() {
            let button = UIButton(type: .custom)
            item.titleUppercased.bindTo(button.rx.title(for: .normal)).addDisposableTo(disposeBag) // memory leak 

            topMenuStackView.addArrangedSubview(button)
        }
}

Instruments screenshot

1 个答案:

答案 0 :(得分:1)

您需要编写类似的订阅代码

viewModel?.menuData.asObservable().subscribe(onNext: { [unowned self] in   
  self.setupTopMenu($0)
}).addDisposableTo(disposeBag)

这是因为在使用函数传递语法时,隐式保留self。遗憾的是,没有办法解决这个问题。