2009-04-12 11 views

risposta

11

Di solito non è necessario creare un pool di autorelease, perché il sistema si preoccupa di questo. Ma a volte devi farlo. È solito in grandi loop. Codice sarebbe simile a questa:

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
int i;  
for (i = 0; i < 1000000; i++) {  
    id object = [someArray objectAtIndex:i]; 
    // do something with object 
    if (i % 1000 == 0) { 
    [pool release]; 
    pool = [[NSAutoreleasePool alloc] init]; 
    } 
} 
[pool release]; 

piscine autorelease sono tenuti come uno stack: se si effettua una nuova piscina autorelease, esso viene aggiunto in cima alla pila, e ogni messaggio autorelease mette il ricevitore nella piscina più in alto .

+0

Buona descrizione. Chiamare objectAtIndex: tuttavia non aggiunge nulla al pool autorelease, quindi è OK utilizzarlo in un loop senza il pool di autorelease. –

+1

Ricorda che Apple consiglia di utilizzare [pool drain] invece di [pool release] come abitudine per la compatibilità futura con gli ambienti GC. –

+0

@Marc Charbonneau quindi non avresti una perdita per non chiamare l'uscita in piscina? –

Problemi correlati