Swift キャプチャリストについてのメモ
続いてキャプチャリストについて
キャプチャリストを使うと、クロージャ内での参照型のオブジェクトのキャプチャルールを定義することができる、とのこと。
以下のような場合循環参照が発生するみたいです。
// self.xxx は 強参照するので、Hoge のインスタンス生成後、インスタンス = nil としてインスタンスからの参照を消してもクロージャからキャプチャされた強参照が残ってしまう。そのため解放されない問題が起きる class Hoge { var hello: String = "Hello" lazy var helloWorld:() -> String = { self.hello + " World"; } }
これに対し、[unowned self] を付与することで強参照しないようにすることができます
lazy var helloWorld2:() -> String = { [unowned self] in return self.hello + " World"; }
なお、例中の lazy は初期化のタイミングを遅らせる場合に利用するものです。 lazy の指定がない場合、クロージャ内では self 識別子を使うことができません。
勉強させてもらったサイト