Ich las in der Dokumentation von Apple über Management-Speicher, wenn ich zu Autofreigabepool Blöcke bekam und etwas hat mir denken.iOS Autofreigabepool Blöcke
Any object sent an autorelease message inside the autorelease pool block is
released at the end of the block.
Ich bin mir nicht sicher, ob ich das vollständig verstehe. Jedes Objekt, das in einem Autorelease-Pool-Block erstellt wird, wird trotzdem am Ende des Blocks freigegeben, da dies die Lebensdauer ist. Warum müssen Sie die Autorelease für das Objekt aufrufen, wenn es am Ende der Blockierung trotzdem freigegeben wird?
Um klarer, werde ich ein Beispiel geben, was ich denke ich:
@autoreleasepool {
MyObject *obj = [[MyObject alloc] init]; // no autorelease call here
/* use the object*/
//....
// in the end it should get deallocated because it's lifespan ends, right?
// so why do we need to call autorelease then?!
}
PS: Bitte mich nicht, weil der ARC sagen, dass wir einige Dinge nicht tun müssen, um weil ARC sich um sie kümmert. Ich bin mir dessen voll bewusst, aber ich möchte ARC für einige Momente beiseite lassen, um den Mechanismus der Speicherverwaltung zu verstehen.
also wie beantwortet das meine frage? Ich habe nur ein einfaches Beispiel gegeben, um Antworten wie diese zu vermeiden, die nicht viel mit der Frage zu tun haben.Ich habe dem kleinen Beispiel auch Kommentare hinzugefügt. – Teo
Normalerweise verwenden Sie nur Autorelease-Pools in einer Funktion mit hoher Speicherauslastung, die Sie früher als normal freigeben müssen. Der Absatz sollte einen Kontext hinzufügen. – Kibitz503
Ok, also auf einem nicht ARC-env, '' MyObject * obj = [[MyObject alloc] init]; '' in einem Autorelease-Pool wäre ein Speicherleck, aber auf einem ARC-env fügt der Compiler automatisch einen Freigabeaufruf für die Objekt oder warum es kein Speicherleck mehr ist? – Teo