考虑这个例子:
- (void)doSomething {
@autoreleasepool {
if (someCondition) {
/* ... allocate some autoreleased objects here ... */
return;
}
}
}
以前,使用手动NSAutoreleasePools,如果我们提前返回,我们需要调用[pool drain]
,否则池将不会被耗尽。
使用新的@autoreleasepool {}
答案 0 :(得分:15)
答案是肯定的:
当块正常退出时,无论是通过fallthrough还是定向控制流(例如return或break),自动释放池都将恢复到已保存状态,释放其中的所有对象。当异常退出块时,池不会耗尽。
来源: http://clang.llvm.org/docs/AutomaticReferenceCounting.html#autoreleasepool