我正在运行仪器来检查内存泄漏,并且在将此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)
}
}
答案 0 :(得分:1)
您需要编写类似的订阅代码
viewModel?.menuData.asObservable().subscribe(onNext: { [unowned self] in
self.setupTopMenu($0)
}).addDisposableTo(disposeBag)
这是因为在使用函数传递语法时,隐式保留self
。遗憾的是,没有办法解决这个问题。