cocoa automatic-ref-counting nsautoreleasepool llvm-3.0

cocoa - ¿Se drena un @autoreleasepool{} al regresar/salir temprano?



automatic-ref-counting nsautoreleasepool (1)

Considera este ejemplo:

- (void)doSomething { @autoreleasepool { if (someCondition) { /* ... allocate some autoreleased objects here ... */ return; } } }

Anteriormente, con NSAutoreleasePools manual, si regresábamos temprano, necesitábamos llamar [pool drain] , de lo contrario, la piscina no se drenaría. Con el nuevo @autoreleasepool {}


La respuesta es sí:

Cuando se sale del bloque normalmente, ya sea mediante un flujo de control directo o directo (como el retorno o la interrupción), el grupo de liberación automática se restaura al estado guardado, liberando todos los objetos en él. Cuando se sale del bloque con una excepción, la agrupación no se agota.

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