我正在浏览文档(有关“自动引用计数”一节“关闭的强参考周期”一节),并且在定义类时,我似乎无法找出案例,我应该在一个属性的闭包中保留对self
(该类的实例)的强烈参考。捕获列表似乎总是避免内存泄漏的最佳解决方案,我真的无法想象任何应该保持强大参考周期的情况。Swift中关闭的强参考周期
这里有例子,该文档提供了:
class HTMLElement {
let name: String
let text: String?
// Without Capture List
@lazy var asHTML:() -> String = {
if let text = self.text {
return "<\(self.name)>\(text)</\(self.name)>"
} else {
return "<\(self.name) />"
}
}
init(name: String, text: String? = nil) {
self.name = name
self.text = text
}
deinit {
println("\(name) is being deinitialized")
}
}
class HTMLElement {
let name: String
let text: String?
// With Capture List
@lazy var asHTML:() -> String = {
[unowned self] in
if let text = self.text {
return "<\(self.name)>\(text)</\(self.name)>"
} else {
return "<\(self.name) />"
}
}
init(name: String, text: String? = nil) {
self.name = name
self.text = text
}
deinit {
println("\(name) is being deinitialized")
}
}
准确地说你的问题是什么? – holex
“我真的无法想象任何情况下我应该保持一个强大的参考周期” - >有没有? – Giovanni
这是一个未被优化的代码要避免的例子。 – Giovanni