人生ずっと勉強

人生ずっと勉強ですね。 https://twitter.com/KiyotakaGoto

個人的 ARC におけるライフタイム修飾子と、関連する型修飾子まとめ

詳解 Objective-C 2.0 第3版より。

ライフタイム修飾子

__strong 通常の変数による参照。オーナーシップが伴う。
__weak オーナーシップを伴わない。ただしゼロ化(弱い参照の変数が参照していたオブジェクトが解放されたときに、自動的に nil が入ること)される
__unsafe_unretained ゼロ化をしない __weak 変数。C言語のポインタ変数と同じ。
__autoreleasing メソッドに対する引数として、インスタンスオブジェクトへの間接ポインタが渡されている時につけているとみなされる修飾子。メソッドの処理に先立ち一時的な変数作成→ライトバック渡し(ARCにおける参照渡し)の実引数 != nil →そのポインタが指す値を一時変数に書込→メソッドの処理中はこの変数を読み書きしながら処理→制御を呼び出し側に戻すとき、この一時変数を retain, autorelease して、実引数が指していた変数に書き込む→呼び出し側に戻されたオブジェクトは、自動解放プールが有効な間は存在し続ける。

型修飾子

__bridge id型と void*型の間のキャストを可能にする。
out ライトバック渡しのときに、メソッドから値を戻すだけの役割の仮引数につけると、呼び出し時のコピーが省略できる。