ios - 这个关闭会导致内存泄漏吗?

标签 ios swift memory-leaks

我知道以下内容会导致内存泄漏,因为 MyClassmyClosure 相互引用。

var MyClass {
    var myVar = 0
    let myClosure: (Int) -> Void

    init() {
        self.myClosure = { x in
            self.myVar = x
        }
    }
}

以下是否也会导致内存泄漏?为什么或为什么不?

var MyClass {
    var myVar = 0

    function myFunc() {
        let myClosure = { x in
            self.myVar = x
        }

        myClosure(0)
    }
}

最佳答案

不会,这(实际上)不会导致内存泄漏。 myClosure()myFunc() 内部定义。当 myClosure(0) 被调用时,闭包将被安排执行,当它完成时,它将被从内存中删除。

您的代码的唯一问题是闭包内的 self 是一个强引用,它可能会在闭包执行时被释放。这将导致严重的过度错误。确保创建对 self 的弱引用,并在闭包中使用它。

关于ios - 这个关闭会导致内存泄漏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37436920/

相关文章:

ios - 以编程方式加载时,UIViewController 加载为空

ios - JSON 倒过来 NSJSONSerialization

ios - 修复 iOS 拉动刷新动画

android - 稍后从混合应用程序迁移到 native 应用程序

swift - 使用复选框按钮 RxCocoa/RxSwift 验证表单

swift - iPad Swift Playgrounds 无法运行 ARKit 代码/崩溃

Hadoop:运行超出虚拟内存限制,显示大量数据

Java:一个指向可达对象的无法到达的对象会被垃圾收集吗?

c - 更改 printf 后,AddressSanitizer 未发现明显泄漏

ios - 从 UIController 调用 UIView