Jakie są zalety deklarowania argumentów metody __autoreleasing?

Jak naPrzejście do Uwagi do wydania ARC:

__autoreleasing jest używany do oznaczania argumentów, które są przekazywane przez referencję (id *) i są automatycznie zwalniane po zwróceniu.

Na przykład:

-(BOOL)performOperationWithError:(NSError * __autoreleasing *)error;

Ale jakie są zalety powyższego w porównaniu z:

-(BOOL)performOperationWithError:(NSError * __strong *)error;

Aktualizacja:

Kilka odpowiedzi odnosi się do kompilatora trick var temp, który radzi sobie z niedopasowaniem var i argument jakokorzyść z__autoreleasing. Nie rozumiem, dlaczego kompilator nie może zrobić tego samego__strong argument. Mam na myśli__weak var i__strong argument, kompilator może podobnie:

NSError * __weak error;
NSError * __strong tmp = error;
BOOL OK = [myObject performOperationWithError:&tmp];
error = tmp;
if (!OK) {
    // Report the error.
}

Kompilator wie-(BOOL)performOperationWithError:(NSError * __strong *)error; zwraca silne odwołanie (+1), więc obsługuje je tak jak każde innenew-rodzina rodziny. Odtmp żyje w takim samym zakresie jakerror, kompilator może rozsądnie utrzymać go przy życiu tak długo, jak długoerror więc__weak odniesienie(error) jest teraz obsługiwane przez a__strong odniesienie(tmp) i nie zostaną anulowane do końca zakresu.

questionAnswers(3)

yourAnswerToTheQuestion