[英]Starting with Objective-C: To ARC or not to ARC?
根据Apple的ARC文档 ,使用ARC时开发软件的方式发生了相当大的变化。
作为Objective-C的完全初学者,开始使用ARC禁用会不会更好,因为它会让我对幕后发生的事情有更好的低级理解? 或者,ARC基本上不赞成做事的“旧方法”,以至于不值得花时间学习?
这基本上是一个意见问题,因此相当危险。
我的意见是合格的。 值得学习基本的内存管理。 资格不会陷入其中。 通过一些非常简单的项目了解ARC正在为您做些什么。 一旦你对如何处理内存管理有了基本的了解,即如何避免保留周期(正如jemmons提到的那样,它们仍然可能是ARC的一个问题)。 一旦掌握了内存管理的基本知识。 开始使用ARC。
同样,Jason Coco指出ARC处理内存管理(简单地说就是)NSObject子类。 因此,如果您需要使用它们,您仍将自行处理所有CF对象。
关于ARC在幕后为您做些什么的一个很好的解释可以在WWDC2011会话323-介绍自动参考计数中找到。
但是还有一些其他因素可能会引导您的决定。
您需要定位哪些设备?
如果您打算以iOS 4.3为目标,那么ARC会为您有效地处理内存管理。(NSObject子类)
如果您计划定位iOS 4.2,那么您将无法使用weak
引用(您将使用unsafe_unretained)。 iPhone 3g? 和iPod touch第二代卡在这个操作系统级别,因为有许多这些设备仍在服务中,许多开发人员仍在瞄准它们。
如果您计划将目标锁定在早于4.2的iOS
(这种情况很少见),您肯定需要学习MRC(手动参考计数)。
如果您计划构建Mac应用程序,则该平台上可以使用垃圾收集器。 ARC也是一种选择(完整的ARC 10.7,没有弱支持10.6)。
值得注意的是,当您在Xcode中启动新项目时,默认情况下会检查ARC。 这与旧的retain
/ release
方式被弃用以及Apple将ARC视为未来一样好。 作为一个新的ObjC开发人员,你的第一课可能是向Apple上游游泳是不值得的。
此外,虽然将旧的retain
/ release
样本转换为ARC相当容易(但大多数情况下,只删除任何retain
, release
和autorelease
),反之则不然。 而且我已经看到很多样本代码都是以ARC风格编写的。 因此,当有人刚开始时,学习ARC的方式需要付出更多。
请注意,这并不意味着您不必了解引用计数。 它仍然是对象生命周期的重要组成部分,您仍然需要了解这些事情(如果只知道何时使用weak
引用或strong
引用)。 但是,当编写代码时,请使用ARC编写代码。
“旧”风格只是用于管理对象生命周期的引用。 它实际上并没有那么多,但它可能容易出错并导致各种悲伤。 如果你刚开始,我个人建议你学习使用ARC编程。 当您需要使用C库对象(如CoreFoundation或CoreGraphics)时,您仍然可以处理引用计数。
Apple本身为新项目推荐使用ARC。 http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html#//apple_ref/doc/uid/10000011i
阅读第2点概览
除了内存管理之外,在Objective C和iOS中学习更有趣。 我的建议:不要打扰MRR
回顾它并了解正在发生的事情将是一个好主意,但对于开发它并不重要,并且正如您所看到的那样,如果不是所有开发人员都将其部署目标移至iOS 5.0+,那么您可能不会在人工参考计数下开发。
但是,如果您计划在CFStringRef等代码中使用非ROP可获得的对象指针,您可能希望真正查看非ARC,以便您可以理解诸如桥之类的内容,因为您可以在一个项目中组合ARC和非ARC代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.