Удаляет ли @autoreleasepool {} при возврате/выходе раньше? - программирование
Подтвердить что ты не робот

Удаляет ли @autoreleasepool {} при возврате/выходе раньше?

Рассмотрим следующий пример:

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

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

         return;
      }
   }
}

Раньше с ручным NSAutoreleasePools, если мы вернулись раньше, нам нужно было позвонить [pool drain], иначе пул не будет слит. С помощью нового @autoreleasepool {}

4b9b3361

Ответ 1

Ответ: ДА:

Когда блок выходит из строя, будь то путем прохода или направленного потока управления (например, возврата или разрыва), пул авторесурсов восстанавливается в сохраненное состояние, освобождая все объекты в нем. Когда блок выходит из исключения, пул не сливается.

Источник: http://clang.llvm.org/docs/AutomaticReferenceCounting.html#autoreleasepool