Истощается ли @autoreleasepool {} при раннем возвращении / выходе? - PullRequest
17 голосов
/ 09 февраля 2012

Рассмотрим этот пример:

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

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

         return;
      }
   }
}

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

1 Ответ

15 голосов
/ 09 февраля 2012

Ответ ДА:

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

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

...