在WWDC 2014会议403 中级Swift和成绩单中,有以下幻灯片

在这种情况下,发言人说,如果我们不在[unowned self]那里使用,那将是内存泄漏.这是否意味着我们应该始终使用[unowned self]内部封闭?
在Swift Weather应用程序的ViewController.swift的第64行,我不使用[unowned self].但我通过使用一些@IBOutlet像self.temperature和更新UI self.loadingIndicator.它可能没问题,因为@IBOutlet我所定义的都是weak.但为了安全起见,我们应该一直使用[unowned self]吗?
class TempNotifier {
var onChange: (Int) -> Void = {_ in }
var currentTemp = 72
init() {
onChange = { [unowned self] temp in
self.currentTemp = temp
}
}
}
Run Code Online (Sandbox Code Playgroud) 我正在使用Firebase来观察事件,然后在完成处理程序中设置图像
FirebaseRef.observeSingleEvent(of: .value, with: { (snapshot) in
if let _ = snapshot.value as? NSNull {
self.img = UIImage(named:"Some-image")!
} else {
self.img = UIImage(named: "some-other-image")!
}
})
Run Code Online (Sandbox Code Playgroud)
但是我收到了这个错误
闭包不能隐式捕获变异的自身参数
我不确定这个错误是什么,搜索解决方案没有帮助
我正在解析Swift语言指南教程(来自Apple iOS开发库),每个章节我都会创建一个单独的swift文件.在每个文件中,我创建了多个函数,其中我隔离了它们提供的代码片段.一切都在进行,直到测试闭包的强引用周期.由于某种原因,如果包含闭包的类(用于计算属性)在函数内声明,则闭包不能看到封闭类的"self"引用.有什么想法吗?如果未在函数内声明类,则它可以正常工作.
func strongRefClosure() {
class HTMLElement {
let name: String
let text: String?
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")
}
}
var paragraph: HTMLElement? = HTMLElement(name: "p", text: "hello, world")
println(paragraph!.asHTML())
}
Run Code Online (Sandbox Code Playgroud)