@autoreleasepool 没有 ARC?

Posted

技术标签:

【中文标题】@autoreleasepool 没有 ARC?【英文标题】:@autoreleasepool without ARC? 【发布时间】:2011-12-18 12:46:21 【问题描述】:

我是 Xcode 4.2 的新手,我还没有完全掌握 ARC。但是,我确实读到 @autoreleasepool 取代了手动使用自动释放池,并在后台做了一些特殊的魔法来与 ARC 配合得很好。

然而,当我在 Xcode 4.2 中开始一个新项目时,特别是在 ARC 选项关闭的情况下关闭,我仍然会在模板代码中看到 @autoreleasepool 语句。

这是怎么回事?

【问题讨论】:

【参考方案1】:

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

@autoreleasepool 可用于非 ARC 翻译单元,具有等效语义。

格雷格帕克说[1][2]:

如果您的部署目标足够新,LLVM 3.0 的 @autoreleasepool ... 比 NSAutoreleasePool 快得多。不需要 ARC。 (...) 始终有效,但部署目标为 OS X 10.7 或 ios 5.0 时速度更快。

所以你可以使用@autoreleasepool而不考虑ARC,它会比OS X v10.7+和iOS 5.0+上的NSAutoreleasePool更快。

【讨论】:

以上是关于@autoreleasepool 没有 ARC?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 多线程,ARC

Objective C - ARC - 何时使用@autoreleasepool

@autoreleasepool 在我的场景和 ARC 中是不是有意义?

循环内的 Objective-C 循环和 @autoreleasepool 的 ARC 内存问题

自动引用计数 (ARC) 中的 NSThreads

iOS autoreleasepool in main 和 ARC alloc 发布