ios - UIView拥有很强的引用性

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

当我使用仪器时,我发现内存使用量增加,因此它不会释放内存。当我注释掉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/

相关文章:

ios - 在 iOS 中存储临时数据

ios - swift in UI test(测试UITableView中cell的个数)

iphone - 如何以安全的方式为其他开发人员构建框架或库?

swift - 尝试将 CollectionView 添加到 ResuableView header ,例如 Instagram 或 SNapchat

ios - 避免 Objective-C block 保留周期内存泄漏的简单规则是什么?

c++ - 使用堆调试 MS VC++ 2005

UITableView 中的 iPhone 动态 UIButton

ios - AVAudioRecorder 不会创建可以打开和播放的.m4a 文件

ios - 如何按部分从 Api 接收数据?

Swift 在标签上显示核心数据