【发布时间】:2018-11-14 19:31:11
【问题描述】:
我的闭包会自行保留。它会导致捕获内部的所有其他对象。我可以使用弱引用传递这样的对象,但它不能解决保留周期的问题。在没有保留循环的情况下使用闭包进行递归的正确方法是什么?
class Foo {
var s = "Bar"
deinit {
print("deinit") // Won't be executed!
}
}
class TestVC: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let foo = Foo() // Weak works, but not the right solution.
var closure: () -> Void = { return }
closure = {
print(foo.s)
if true {
return
} else {
closure()
}
}
}
}
【问题讨论】:
-
@matt 我已经更改了代码。只有当 foo 很弱时才会调用 Deinit。但它并没有解决闭包保留周期问题。