Из моего понимания, рекомендуемый способ (с поддержкой 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;
Однако из ответа на эту тему, Handling Pointer-to-Pointer Ownership Issues in ARC.
Кажется - (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;
Кажется, второй один имеет лучшую производительность? Потому что он опускает процесс «присваивать значение назад» и «автореализацию». Но я редко вижу функции, объявленные таким образом. Лучше ли использовать вторую функцию для выполнения задания «передать по ссылке»?
Любое предложение или пояснение? Заранее спасибо.
благодарит за ваш ответ. Но я не понял вашу вторую часть хорошо (представьте ...). Не могли бы вы дать мне пример кода/фрагмент? –
он дважды опущен без какой-либо причины, поэтому нах .... :) –