![](/img/trans.png)
[英]CTFramesetterCreateWithAttributedString cause memory leak
[英]Will this closure cause a memory leak?
我知道以下内容会导致内存泄漏,因为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)
}
}
不,这将(实际上)不会导致内存泄漏。 myClosure()
在myFunc()
定义为local。 当myClosure(0)
被调用时,闭包将被安排执行,一旦完成,它将被删除内存。
你的代码唯一的问题是,在你的闭包内部, self
是一个强引用,可能在执行闭包时被释放。 这将导致错误的超额错误。 确保你创建了一个对self的弱引用,并在你的闭包中使用它。
声明弱自我以避免内存泄漏并保护自己以避免调用释放的自我
func myFunc() {
let myClosure = { [weak self] x in
guard let strongSelf = self else {
return
}
strongSelf.myVar = x
}
myClosure(0)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.