ARC上有很多教程。但是我不明白 unowned 或 weak 的明确工作是如何引用捕获的变量变为空的。
苹果文档:
当闭包和它捕获的实例总是相互引用时,将闭包中的捕获定义为无主引用,并且总是同时被释放。
class RetainCycle {
var closure: (() -> Void)!
var string = "Hello"
init() {
closure = { [unowned self] in
self.string = "Hello, World!"
}
}
}
闭包在其主体内引用 self(作为引用 self.string 的一种方式),闭包捕获 self,这意味着它持有对 RetainCycle 实例的强引用。两者之间形成了一个强参考循环。通过无主它的中断引用循环。
但我想了解哪种情况不会同时相互解除分配,而 Unowned self 变为 null 只是想让它崩溃。?