UIView拥有强大的参考价值

时间:2016-06-13 09:04:48

标签: ios swift memory-leaks weak-references

我有这样的代码

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
    }
}

当我使用乐器时,我发现ram的使用量增加,因此它不会释放内存。当我注释掉button.reversePop()时,ram的使用不会增加。

我该怎么做才能防止内存泄漏?

1 个答案:

答案 0 :(得分:4)

在此关闭中,您每次点击时都会捕获视图。您需要使用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 view] ,因为你没有在封闭中调用self,不需要弱化自