2009-07-18 12 views
5

Ich entwickle für iPhone, Ziel-c. Wann wird das Objekt tatsächlich freigegeben, wenn wir Autorelease verwenden - wenn der Pool für die Hauptautorelease freigegeben wird (dh die Anwendung wird beendet?) Oder sobald die lokale Funktion endet? Zum Beispiel möchte ich so etwas wie dies zu tun:Wann wird ein Objekt mit 'Autorelease' veröffentlicht?

 
- (void) test 
{ 
    MyObj* p = [[[MyObj alloc] init] autorelease]; 
    ... 

    // is p 'released' here? 
} 

So ist ‚p‘, sobald die Funktion beendet wird freigegeben, oder wenn der Autofreigabepool dieses Threads freigegeben wird? Ich dachte, es war, als die lokale Funktion beendet, aber ich meinen eigenen Thread einfach und der Einrichtung eines Autofreigabepool benötigt geschaffen, die mir zweite Gedanken auf schenken, wenn dies geschieht eigentlich ..

Dank

Antwort

6

Ein autoreleases Objekt ist freigegeben zur gleichen Zeit der Autorelease-Pool ist. Also für Ihren Thread wird es veröffentlicht, wenn Sie den Pool freigeben. Im Hauptthread, wenn Sie nicht Ihre eigenen erstellen, glaube ich, dass der Autorelease-Pool jedes Mal durch die Run-Schleife abgelassen wird - aber ich habe mich nicht lange angesehen.

+1

Hier ist der Link zur Seite über Autorelease-Pools: http://developer.apple.com/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html – Jonathon

1

Wie Argothian sagt, es freigegeben wird, wenn der Autofreigabepool freigegeben wird, die jedes Mal durch die Laufschleife in einer normalen Cocoa-Anwendung geschieht, nicht bei Beendigung der Anwendung (außer natürlich, Sie nicht über eine Laufschleife haben In diesem Fall müssen Sie den Autorelease-Pool erstellen und ihn selbst freigeben). Autorelease-Pools wissen nicht über jeden einzelnen Funktionsaufruf und können daher am Ende eines Funktionsaufrufs keine Daten freigeben.

Verwandte Themen