繁体   English   中英

从Objective-C开始:ARC还是ARC?

[英]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相当容易(但大多数情况下,只删除任何retainreleaseautorelease ),反之则不然。 而且我已经看到很多样本代码都是以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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM