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