メソッド引数の制御について - Automatic Reference Counting

SPECIAL


メソッド引数の制御について

ARC では、メソッドの引数としてオブジェクトを渡した場合、標準では、そのオブジェクトは retain されて、関数の呼び出しが終了した時点で retain されるようです。

これは、引数の型に対して "__attribute__((ns_consumed))" を設定したのと同じ挙動のようで、マルチスレッドで試してみると、ある大域変数を引数に渡してその処理中に大域変数に nil を代入してみても、通常では、メソッドの処理が終わるまではオブジェクトが維持されて、メソッドが終わるのに合わせて解放されるようでした。

ほぼ同じコードを ARC を無効にした状態で実行してみたところ、大域変数が途中で解放された後、続きの処理ではアクセスエラーが発生したので、ARC では何も指定しなくても、引数は retain された状態でメソッドが呼び出されるようになっているようです。

 

ところで、引数に渡した値を retain させたくない場合には、どのようにしたらいいのでしょうね。

[ Automatic Reference Counting 目次へ ]