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