2012-02-09 8 views
16

Considere este ejemplo:¿Se vacía un @autoreleasepool {} al regresar/salir temprano?

- (void)doSomething { 
    @autoreleasepool { 
     if (someCondition) { 

     /* ... allocate some autoreleased objects here ... */ 

     return; 
     } 
    } 
} 

Anteriormente, la NSAutoreleasePools manuales, si regresamos temprano, teníamos que llamar [pool drain], de lo contrario la piscina no se agotaría. Con el nuevo @autoreleasepool {}

+0

http://stackoverflow.com/questions/5083216/return-statement-inside-nsautoreleasepool-scope –

+1

no pude encontrar la respuesta lo suficientemente rápido en la interwebs, por lo tanto, Estoy preguntando y respondiendo al mismo tiempo ... –

Respuesta

14

la respuesta es sí:

Cuando el bloque se sale normalmente, ya sea por fallthrough o flujo de control dirigida (como el retorno o romper), la piscina autorelease se restaura a los salvados estado, liberando todos los objetos en él. Cuando se sale del bloque con una excepción, el grupo no se vacía.

Fuente: http://clang.llvm.org/docs/AutomaticReferenceCounting.html#autoreleasepool

Cuestiones relacionadas