私の現在の理解から、「参照渡し」の推奨される方法(ARCが有効になっている場合)は次のようになります。
-(void)somefunc:(someclass **)byref;
// and 'someclass **' should be inferred to 'someclass * __autoreleasing *'
// am i right?
//or we could just explicitly define it like
-(void)somefunc:(someclass * __autoreleasing *)byref;
ただし、このスレッドへの回答から、ARC での Pointer-to-Pointer Ownership Issues の処理。
-(void)somefunc:(someclass *__strong *)byref も同様にトリックを実行できるようです(上記のリンクのdemo2で)。
1.-(void)somefunc:(someclass * __autoreleasing *)byref;
2.-(void)somefunc:(someclass *__strong *)byref
最初のものについては、Apple によって文書化されているように、コンパイラによって次のように暗黙的に書き換えられる必要があります。
NSError * __strong error;
NSError * __autoreleasing tmp = error;
BOOL OK = [myObject performOperationWithError:&tmp];
error = tmp;
2番目の方がパフォーマンスが良いようですか?「値の代入」と「自動解放」のプロセスを省略しているためです。しかし、このように宣言された関数はめったに見ません。2番目の関数を使用して「参照渡し」ジョブを実行する方が良い方法ですか?
提案や説明はありますか?前もって感謝します。