【发布时间】:2015-05-03 16:40:20
【问题描述】:
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?
【问题讨论】:
-
闭包是非转义的(意味着闭包不是异步的或没有延迟,因此它可以“留在范围内”)。你不需要使用它们中的任何一个。见escaping vs non-escaping。有关您需要在哪里使用的示例,请参阅here
标签: swift memory-management closures