2017-05-31 1 views
0

Normalerweise rufen wir @autoreleasepool auf, um den automatischen Release-Pool in ARC zu löschen.Wie kann der aktuelle Release-Pool entladen werden?

@autoreleasepool { 
    MyObject* object = [[MyObject alloc] init]; 
} 
//do something 

Jetzt möchte ich alle MyObject Objekte abgelassen, während ich MyFunction nennen.

- (void)MyFunction 
{ 
    //[[NSAutoReleasePool defaultAutoReleasePool] drain]; 
    //do something 
} 

Ich weiß, dass @autoreleasepool einen neuen Pool erstellen. Ich möchte nur MyFunction Drain-Standard-Pool oder aktuelle Pool, die sicherstellen können, dass alle unbenutzten MyObject im Autorelease-Pool im allgemeinen Fall abgelassen wird.

Ist das möglich?

Antwort

0

@autoreleasepool { ... } erstellt und löscht (entwässert) einen neuen Autorespulepool. Sie können den aktuellen Autorespulepool nicht manuell leeren. Manchmal kann es notwendig sein, Objekte im Pool freizugeben. In diesem Fall sollten Sie verschachtelte Pools verwendet werden, zB:

@autoreleasepool { // Initial pool 
    ... 
    for(...) { 
     @autoreleasepool { 
      // Using large amount in ARP 
     } 
    } 
    ... 
} 

BTW: Das Objekt in dem ersten Notierung ist kein Mitglied einer ARP, weil es ein Ergebnis eines alloc ist - Aufruf init und damit haben Sie das Eigentum daran (siehe Memory Management Rules).

Verwandte Themen