Nella maggior parte dei casi, non importa in alcun modo. Poiché -autorelease
significa semplicemente che l'oggetto verrà rilasciato alla fine dell'iterazione corrente del ciclo di esecuzione, l'oggetto verrà rilasciato in entrambi i casi.
Il più grande vantaggio dell'utilizzo di -autorelease
è che non devi preoccuparti della durata dell'oggetto nel contesto del tuo metodo. Quindi, se in seguito decidi di voler fare qualcosa con un oggetto diverse righe dopo l'ultimo utilizzo, non devi preoccuparti di spostare la tua chiamata su -release
.
L'istanza principale quando si utilizza -release
farà una differenza notevole rispetto al utilizzando -autorelease
è se si sta creando un sacco di oggetti temporanei nel metodo. Ad esempio, si consideri il seguente metodo:
- (void)someMethod {
NSUInteger i = 0;
while (i < 100000) {
id tempObject = [[[SomeClass alloc] init] autorelease];
// Do something with tempObject
i++;
}
}
Con il tempo questo metodo termina, hai 100.000 oggetti seduti in piscina autorelease attesa di essere rilasciato. A seconda della classe di tempObject
, questo potrebbe o non potrebbe essere un grosso problema sul desktop, ma sicuramente sarà sull'iPhone con limitazioni di memoria. Pertanto, dovresti utilizzare lo -release
su -autorelease
se stai allineando molti oggetti temporanei. Ma, per molti/la maggior parte degli usi, non vedrai nessuna grande differenza tra i due.
fonte
2009-08-16 02:41:25
+1. l'autorelease ha un sacco di critiche sulle prestazioni (la scia che raramente ho visto è supportata da numeri in un normale codice non a ciclo ampio), ma il salvataggio automatico consente anche di risparmiare un sacco di perdite quando il codice viene rifatto. Uso la versione più frequente nelle routine di basso livello poiché non so se potrebbero essere chiamati in un loop di grandi dimensioni ad un livello più alto. Se si intende utilizzare la versione, tuttavia, è necessario impostare immediatamente la variabile su nil se la variabile sarà ancora nell'ambito. Non rilasciare mai un oggetto ma avere ancora un puntatore. –