首页 文章

RxSwift绑定数据到UIButton内存泄漏

提问于
浏览
2

我正在运行检测内存泄漏的工具,并且在将此observable与UIButton Headers 绑定时,我发现内存泄漏 . 知道我做错了什么或如何解决这个问题?

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 回答

  • 1

    你会想要编写你的订阅代码

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

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

相关问题