我知道以下内容导致内存泄漏,因为MyClass
和myClosure
相互引用。
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)
}
}
答案 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)
}