17

考虑这个例子:

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

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

         return;
      }
   }
}

以前使用手动 NSAutoreleasePools,如果我们提前返回,我们需要调用[pool drain],否则池不会被耗尽。随着新@autoreleasepool {}

4

1 回答 1

16

答案是肯定的:

当块正常退出时,无论是通过fallthrough还是定向控制流(如return或break),自动释放池都恢复到保存状态,释放其中的所有对象。当块异常退出时,池不会被耗尽。

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

于 2012-02-09T10:56:41.813 回答