Удаляет ли @autoreleasepool {} при возврате/выходе раньше?
Рассмотрим следующий пример:
- (void)doSomething {
@autoreleasepool {
if (someCondition) {
/* ... allocate some autoreleased objects here ... */
return;
}
}
}
Раньше с ручным NSAutoreleasePools, если мы вернулись раньше, нам нужно было позвонить [pool drain]
, иначе пул не будет слит.
С помощью нового @autoreleasepool {}
Ответы
Ответ 1
Ответ: ДА:
Когда блок выходит из строя, будь то путем прохода или направленного потока управления (например, возврата или разрыва), пул авторесурсов восстанавливается в сохраненное состояние, освобождая все объекты в нем. Когда блок выходит из исключения, пул не сливается.
Источник:
http://clang.llvm.org/docs/AutomaticReferenceCounting.html#autoreleasepool