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