当Swift Closure引用self时会产生强引用循环,就像这个例子:
class Test {
var name = "Hello"
func doSomething() {
{() -> Void in
self.name = "otherName"
}()
}
}
在之前的例子中,我创建了一个强引用循环,因此需要使用以下方法进行修复:
class Test {
var name = "Hello"
func doSomething() {
{[unowned self] () -> Void in
self.name = "otherName"
}()
}
}
问题: 如果我在闭包中使用self,我必须始终使用 unowned self
还是有一些情况需要使用 weak self
?