【发布时间】:2021-08-02 09:58:53
【问题描述】:
class MyClass {
func greeting() {
answer += "Hello, World!"
}
}
class Handler {
var closure: (() -> Void)?
let obj = MyClass()
func setupClosure() {
closure = {
self.obj.greeting()
}
}
deinit {
answer += "Handler is being deinitialized."
}
}
var answer: String = ""
func handlerDeinitialization() -> String {
var handler: Handler? = Handler()
handler!.setupClosure()
handler!.closure!()
handler = nil
return answer
}
print(handlerDeinitialization())
我的预期答案是“Hellow,World!处理程序正在被取消初始化。”如何解决这个问题?我只想更改一行代码,而不是整个代码。
【问题讨论】:
-
您的处理程序的闭包不一定在
Handler的 deinit 中被取消初始化。闭包是引用类型——当最后一个对该闭包的引用被取消初始化时,它们被取消初始化。独立于这个小小的挑剔,您可以随时将对象中的闭包引用设置为 nil。