这种关闭是否会导致内存泄漏?

时间:2016-05-25 12:19:17

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

声明弱自我以避免内存泄漏并保护自己以避免调用释放的自我

func myFunc() {
    let myClosure = { [weak self] x in
        guard let strongSelf = self else {
            return
        }

        strongSelf.myVar = x
    }

    myClosure(0)
}