WWDC 2014セッション403 Intermediate Swiftとトランスクリプトで、次のスライドがありました
その場合スピーカーは言った、[unowned self]
そこで使わないとメモリリークになる。常に[unowned self]
クロージャー内で使用する必要があるという意味ですか?
上スウィフト天気アプリのViewController.swiftのライン64、私は使用しません[unowned self]
。しかし、および@IBOutlet
のようないくつかを使用してUIを更新します。私が定義したはすべてであるため、問題ない可能性があります。しかし、安全のために、常に使用する必要がありますか?self.temperature
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
}
}
}
onChange
ません。[weak self]
これはパブリック(内部ではありますが)プロパティなので、クロージャーである必要があります。したがって、別のオブジェクトがクロージャーを取得して保存し、TempNotifierオブジェクトを保持します(無期限にusingオブジェクトは、)への独自の弱い参照を介しonChange
て、TempNotifier
がなくなるまで、クロージャを解放しませんでしたTempNotifier
。場合var onChange …
したprivate var onChange …
後、[unowned self]
正しいだろう。 私はこれを100%確信しているわけではありません。私が間違っている場合、誰かが私を訂正してください。
[]
ですか?Appleのドキュメントに説明がありません。
{}
空のクロージャー(クロージャーのインスタンス)がデフォルト(何もしない)で(Int) -> Void
、クロージャーの定義です。