关闭。这个问题需要更多focused .它目前不接受答案。
想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post .
7年前关闭。
Improve this question
我还没有使用 ARC,因为我目前正在处理的项目中的大部分代码都是在 iOS 5.0 之前编写的。
我只是想知道,不手动保留/释放(以及由此产生的可能更可靠的代码?)的便利性是否超过了使用 ARC 的任何“成本”?
您对 ARC 有什么经验,您会推荐它吗?
所以:
最佳答案
没有缺点。使用它。今天就去做。它比您的旧代码更快。它比你的旧代码更安全。它比您的旧代码更容易。这不是垃圾收集。它没有 GC 运行时开销。编译器在您应该拥有的所有位置插入保留和释放。但它比你更聪明,可以优化那些实际上不需要的(就像它可以展开循环、消除临时变量、内联函数等)
好的,现在我会告诉你一些小的缺点:
id
的事情会稍微复杂一些。作为 void*
.诸如 id
的 C 数组之类的东西可以多花点时间思考一下才能正确地做。 ObjC 的花式处理 va_args
也会造成麻烦。大多数涉及 ObjC 指针数学的事情都比较棘手。在任何情况下,你都不应该有太多这样的东西。 id
在 struct
.这是相当罕见的,但有时用于打包数据。 -fobjc-arc-exceptions
修复,但会招致以下讨论的处罚:__weak
指针在 iOS 4 或 Mac OS X 10.6 上不能正常工作,这是一种耻辱,但很容易解决。 __weak
指针很棒,但它们不是 ARC 的第一卖点。 -fno-objc-arc
在逐个文件的基础上。不幸的是,Xcode 使这比在实践中应该做的要困难得多。您可能应该将非 ARC 代码移动到单独的 xcodeproj 中以简化此操作。void*
时,您需要了解规则。指向 id
的指针(您继续需要正确执行 KVO)。还有块……嗯,块内存管理很奇怪。objc_retain()
的底层调用来填满他们的头脑。 .
https://stackoverflow.com/questions/8760431/