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.