ARC und autorelease

autorelease wird verwendet, um für die zurückgegebenen Funktion-Objekt, damit der Anrufer nicht zu eigen machen und aufgerufene Version des Objekts in der Zukunft.

Jedoch, ARC fähig ist, zu zählen, Eigentum des Anrufers und lassen Sie ihn nach dem Gebrauch, das heißt, es kann Verhalten wie Smart Pointer in C++. Mit ARC, kann es loszuwerden, autorelease, weil autorelease ist nicht-deterministisch.

Dem Grund bitte ich für diese Frage ist, dass ich sehe das zurückgegebene Objekt ruft dealloc früher im ARC als non-ARC code. Dies führt mich zu glauben, dass ARC benehmen können wie die Smart-Pointer und kann autorelease nutzlos. Ist es wahr oder möglich? Das einzige, was ich denken kann autorelease Nützlichkeit ist im multip-thread oder Netzwerk-code, da es nicht einfach ist, zu zählen, den Besitz, wenn das Objekt vorbei.

Vielen Dank für Ihre Gedanken.

Hier ist der neue edit zu machen, die Sache klar:

mit autorelease

+ (MyClass*) myClass
{
    return [[[MyCClass alloc] init] autorelease];
}

- doSomething
{
   MyClass *obj = [MyClass myClass];
}

ARC:

+ (MyClass*) myClass
{
    return [[MyCClass alloc] init]; //no autorelease
}

- doSomething
{
   MyClass *obj = [MyClass myClass];
   //insert [obj release]
}

So, wir brauchen wirklich nicht autorelease.

Autorelease ist nicht bei allen nicht-deterministisch. Der pool sendet release zu jedem enthaltenen Objekt, sobald an der Unterseite jeder Drehung der run loop.
Ich sehe einige subtl Fehler in autorelease den zugehörigen code. Wenn der code-Aufruf ein Objekt, es ist tatsächlich "loslassen", aber der release erfolgt am Ende der botton jeder Drehung der run loop. Wenn der code Migration zu ACR, stürzt es ab. Der Grund dafür ist, dass die ARC verkürzen die Lebensdauer des Objekts.
Tut es das, aber das sollte keine Rolle spielen, es sei denn, Sie verwenden weak Referenzen, das sollte man immer lokal zu konvertieren strong bevor Sie Sie verwenden.
Es ist mein ganzer Punkt, schwachen und stark ist genug, um loszuwerden, autorelease mit ARC. Es ist das, was in C++.
möglich, Duplikat der Objective-C: Warum ist autorelease (@autoreleasepool) noch erforderlich, ARC?

InformationsquelleAutor user2573923 | 2013-07-11

Schreibe einen Kommentar