@autoreleasepool {}在退回/退出时会消耗吗?

时间:2012-02-09 10:55:12

标签: cocoa automatic-ref-counting nsautoreleasepool llvm-3.0

考虑这个例子:

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

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

         return;
      }
   }
}

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

1 个答案:

答案 0 :(得分:15)

答案是肯定的:

  

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

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