【发布时间】:2016-05-06 22:43:41
【问题描述】:
我在Swift Memory Management: Storing func in var 遇到了类似的问题,但这并没有解决我的问题。
这是我的类定义:
class Test {
var block: (() -> Int)?
func returnInt() -> Int {
return 1
}
deinit {
print("Test deinit")
}
}
我尝试了两种方法来为block 属性赋值,得到了完全不同的结果。第二种方法并没有引起retain circle,这很出乎意料:
var t = Test()
// This will lead to retain cycle
// t.block = t.returnInt
// I thought this will also lead to retain cycle but actually didn't
t.block = {
return t.returnInt()
}
t = Test()
在我看来,变量t 被block 捕获,而block 是t 的属性,所以谁能解释为什么没有保留周期?
【问题讨论】:
-
有趣的是,如果您不将
t重新分配给其他对象并让它超出范围,它的行为就像一个强引用循环,除非您包含[unowned t] in或[weak t] in。 ..
标签: swift2 retain-cycle