Was sind die Vorteile der Angabe von Methodenargumenten __autoreleasing?

Wie proÜbergang zu ARC Release Notes:

__autoreleasing bezeichnet Argumente, die als Referenz übergeben werden (id *) und bei der Rückgabe automatisch freigegeben werden.

Zum Beispiel:

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

Aber was sind die Vorteile der oben genannten im Vergleich zu:

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

Aktualisieren:

Mehrere Antworten beziehen sich auf den temporären Var-Trick-Compiler, der die Nichtübereinstimmung zwischen Var und Argument als das behandeltVorteil von__autoreleasing. Ich verstehe nicht, warum der Compiler nicht den gleichen Trick machen kann__strong Streit. Ich meine, für eine__weak var und__strong Argument, Compiler kann dies ähnlich tun:

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

Compiler weiß-(BOOL)performOperationWithError:(NSError * __strong *)error; Gibt eine starke Referenz (+1) zurück, sodass sie wie jede andere behandelt wirdnew-Familienmethode. Schon seittmp lebt im gleichen Umfang wieerror, Compiler kann es vernünftigerweise am Leben halten, solangeerror so das__weak Referenz(error) wird jetzt unterstützt von a__strong Referenz(tmp) und werden erst am Ende des Geltungsbereichs annulliert.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage