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

Mar*_*Thé 17 cocoa nsautoreleasepool automatic-ref-counting llvm-3.0

考虑这个例子:

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

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

         return;
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*Thé 15

答案是肯定的:

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

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