Retain Cycle in closure in cellView of TableView

Retain Cycle in closure in CellView of TableView

我在 ViewController 中遇到了保留周期问题。我在我的 tableview 单元格中添加了一个闭包来监听点击按钮:

   var onBtnActionClickHandler: (() -> ())?

并将其命名为:

@objc func btnActionClicked() {
    onBtnActionClickHandler?()
}

闭包在 cellForRow 方法中实现为:

cell.onBtnActionClickHandler = { [weak self] in
    self?.btnActionClicked()
}

但我在这个过程中面临着保留循环。根据我的理解,它不应该有很强的引用来保留循环。 任何人都可以解释这个过程中出了什么问题。谢谢

单元格保留了 var onBtnActionClickHandler 并且是对您的控制器的强引用?

您应该将单元格内的 var 声明为 weak :

weak var onBtnActionClickHandler: (() -> ())?

好的。所以我已经解决了这个问题。问题不在于这个单元格,实际上是一个管理器 class 设置了两次监听器并且只释放了一次。那导致了我的 class 中的 reatain 循环。 感谢您对这个问题的所有回答。