我目前正在学习Objective C,到目前为止我一直在使用自动引用计数和我的所有项目。然而,在与一些同事交谈之后,在网上查看了一些论坛之后,我注意到了一种趋势,即关闭自动引用计数并手动管理内存。
我一直想知道ARC是否做得足够好,或者偶尔会丢球。手动分配/释放内存更有效吗?有些人会关闭ARC,因为这是他们习惯的吗?
我应该继续使用ARC吗?如果没有,是否有人知道未来ARC的优势还可以使用?
答案 0 :(得分:5)
简单回答:使用ARC。
答案很长:说真的,只需使用ARC。
我知道没有令人信服的理由不使用ARC。有用。它比手动内存管理更好。用它。也就是说,您仍应该知道内存管理是什么以及引用计数的工作原理。 ARC根本不会改变这种行为,它只是添加了所需的retain
,release
& autorelease
要求遵守使用Objective-C时已成为标准的约定。
答案 1 :(得分:3)
ARC在内存处理方面做得更好,大多数人都会这样做。只有在某些情况下才能更好地关闭ARC的使用,但我怀疑许多开发人员也会需要它。
答案 2 :(得分:2)
当ARC宣布时,我很想避免它。原因是,我花了很多时间使用Java,并且已经看到自动内存管理能够让程序员忘记对象关系的逻辑结构,并诱使他们创建等同于“意大利面条代码”的OOP。
到目前为止,我在ARC看到的并不支持这种恐惧。由于weak
和strong
指定,人们仍然需要考虑对象生命周期,但输入更少。当我在ARC环境中从存在管理问题的人那里回答问题时,这是因为代码也是非ARC的问题。
我现在看不到下行。
答案 3 :(得分:1)
在大多数情况下,使用ARC比手动处理内存管理更有效。如果您不需要旧iOS版本的兼容性,请使用ARC,它将比您更好地完成工作。即使存在一些不支持ARC的旧框架,您也可以仅为此文件停用它。
这个博客大约有一年的历史,但是以一种很好的方式解释了它:http://longweekendmobile.com/2011/09/07/objc-automatic-reference-counting-in-xcode-explained/
答案 4 :(得分:1)
你的同事错了,或者更有可能的是,他们不想转换为ARC,因为担心他们的专业知识可能会在下一次洗牌时失去管理层。
使用ARC和64位运行时将认真清理代码。我在ARC项目中使用的线路减少了约30%。从长远来看,如果不是几周就可以节省你的项目。就个人而言,我不需要在任何ARC项目中追踪自动释放的CALayer。
此外,因为编译器使用生命周期限定符来注释对象的生命周期,所以它通常比你做得更好。在嵌套严密的代码中,您要考虑的最后一件事是发布优化。
ARC将指导您成为更好的程序员,但如果没有,那么您将走上比以前更好的道路。例如,发布/保留代码允许人们多年来使用合成setter滥用(即:创建属性只是因为self.property = property
比[_property release], _property = [newProperty retain]
更好)。我厌倦了通过self.property看到对setter的显式调用。因为ARC会保留并释放你,所以没有令人信服的理由滥用属性设置器,你的代码开始变得更加明显并且闻起来更少。
希望这有帮助!