iOS/Swift-ARC(3)用


キャビネット内のStrong Reference Cycleの解決


これらの問題を解決するために、モジュール内で「capture list」を定義します.
Capture listは、モジュール本体内で別の参照タイプ(i.e class)にアクセスする際に使用するルールを定義します.
モジュール内でselfをキャプチャするとdefaultは強い参照になるため、参照ループは発生しません.弱い参照として指定する必要があります.
💡 **なぜキャビネットでselfを使用するのですか?**(ex. self.someProperty() )
SWIFTは基本的にselfを理解せずにキャプチャすることを要求する.このようにしてこそ、retain cycleが発生することを事前に意識することができるからです.

取得リストの定義


Capture「List」なので、配列に似た形で定義されています
lazy var someClosure = {
    [unowned self, weak delegate = self.delegate] (index: Int, stringToProcess: String) -> String in
    // closure body goes here
}
モジュールに書き込まれたパラメータがない場合、または戻りタイプがない場合は、「in」キーを貼り付ける必要があります.
lazy var someClosure = {
    [unowned self, weak delegate = self.delegate] in
    // closure body goes here
}
→弱さを使えば、傍観者なので、selfが存在するかどうかは、エンクロージャ内で安全に確認できます.
→unownedはselfが確かに存在する場合のみ使用
✻上で定義したHTML ElementクラスのasHTMLプレゼンテーションは、モジュール内では弱いselfよりもunwnedと呼ぶのが適切です.HTML ELLentインスタンスがなければ、最初からasHTML()が呼び出されないからです.