我正在测试Xcode游乐场的快速关闭.
这是我的代码:
import UIKit
class A{
var closure: ()->() = {}
var name: String = "A"
init() {
self.closure = {
self.name = self.name + " Plus"
}
}
deinit {
print(name + " is deinit")
}
}
var a: A?
a = A()
a = nil
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,a是封闭自包含的,所以a永远不会释放.
但是,当我在最后一行之前添加这一行时:
a?.closure = { a?.name = "ttt" }
Run Code Online (Sandbox Code Playgroud)
然后,我在输出窗口中发现"A is deinit",这意味着a已被释放.为什么?是不是回收参考?
要进行测试,我使用一个函数来设置闭包,代码是版本2:
import UIKit
class A{
var closure: ()->() = {}
func funcToSetClosure(){
self.closure = { self.name = "BBB"}
}
var name: …Run Code Online (Sandbox Code Playgroud)