2

我目前正在学习 Objective C,到目前为止,我一直在我的所有项目中使用自动引用计数。然而,在与一些同事交谈后,在查看了一些在线论坛后,我注意到关闭自动引用计数并手动管理内存的趋势。

我一直想知道 ARC 是否做得足够好,或者它是否偶尔会掉球。手动分配/释放内存更有效吗?有些人会因为习惯而关闭 ARC 吗?

我应该继续使用 ARC 吗?如果没有,是否有人知道未来 ARC 会足够好使用吗?

4

5 回答 5

5

简单的答案:使用 ARC。

长答案:说真的,只需使用 ARC。

我知道没有令人信服的理由不使用 ARC。有用。它比手动内存管理要好。用它。也就是说,您仍然应该知道什么是内存管理以及引用计数是如何工作的。ARC 根本没有改变这种行为,它只是添加了 required retain, release&autorelease调用以遵守使用 Objective-C 时已成为标准的约定。

于 2012-10-24T11:35:56.987 回答
3

ARC 在内存处理方面做得比大多数人要好得多。仅在某些情况下最好关闭 ARC,但我怀疑我们中的许多开发人员是否也需要。

另请参阅: To ARC or not to ARC?优缺点都有什么?

于 2012-10-24T11:39:24.087 回答
2

当宣布 ARC 时,我很想避免它。原因是,我花了很多时间使用 Java,并且已经看到自动内存管理能够让程序员忘记对象关系的逻辑结构,并诱导他们创建与“意大利面条代码”等效的 OOP。

到目前为止,我所看到的 ARC 并不支持这种恐惧。由于weakstrong指定,人们仍然需要考虑对象生命周期,但需要更少的输入。当我在这里回答那些在 ARC 环境中存在内存管理问题的人的问题时,这是因为非 ARC 也存在问题的代码。

我现在看不出有什么坏处。

于 2012-10-24T11:46:43.383 回答
1

在大多数情况下,使用 ARC 应该比手动处理内存管理更有效。如果您不需要旧 iOS 版本的兼容性,请使用 ARC,它会比您做得更好。即使有一些不支持 ARC 的旧框架,您也可以仅针对这些文件停用它。

这个博客大约有一年的历史,但解释得很好: http: //longweekendmobile.com/2011/09/07/objc-automatic-reference-counting-in-xcode-explained/

于 2012-10-24T11:42:48.067 回答
1

你的同事错了,或者更有可能他们不想转换为 ARC,因为担心他们的专业知识可能会在下一次洗牌到来时失去管理。

使用 ARC 和 64 位运行时将认真清理您的代码。我在 ARC 项目中使用的行数减少了约 30%。从长远来看,您的项目可以节省几天甚至几周的时间。就我个人而言,我不需要在我的任何 ARC 项目中追踪自动发布的 CALayer。

此外,因为编译器使用生命周期限定符来注释对象的生命周期,它通常比你做得更好。在高度嵌套的代码中,您最不想考虑的是发布优化。

ARC 将引导你成为一名更好的程序员,但如果没有,你将走在比以前更好的道路上。例如,release/retain 代码已经让人们多年来摆脱了对合成 setter 的滥用(即:仅仅因为self.property = property比 更好而创建一个属性[_property release], _property = [newProperty retain])。我受够了通过 self.property 看到对 setter 的显式调用。因为 ARC 将保留和释放从您手中拿走,所以没有令人信服的理由滥用属性设置器,您的代码开始变得更加明显并且气味更少。

希望这可以帮助!

于 2012-10-24T11:54:25.320 回答