我有这样的代码
let view = UIView(x: x, y: y, w: sideSize, h: sideSize)
view.addTapGesture(action: { [weak self] (UITapGestureRecognizer) -> () in
view.reversePop()
})
extension UIView {
public func reversePop() {
// nothing here
}
}
当我使用仪器时,我发现内存使用量增加,因此它不会释放内存。当我注释掉button.reversePop()时,内存使用量不会增加。
如何防止内存泄漏?
最佳答案
在此闭包中,每次点击时都会捕获 View 。您需要使用 UIView 的弱引用,因此您的代码可能如下所示
let view = UIView(x: x, y: y, w: sideSize, h: sideSize)
view.addTapGesture(action: { [weak view] (UITapGestureRecognizer) -> () in
view.reversePop()
})
extension UIView {
public func reversePop() {
// nothing here
}
}
因此,您需要使用[weak self]
,而不是[weak self]
,,因为你没有在闭包中调用 self,不需要弱化 self。
关于ios - UIView拥有很强的引用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37785648/