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 循环。
感谢您对这个问题的所有回答。
我在 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 循环。 感谢您对这个问题的所有回答。