【问题标题】:Starting with Objective-C: To ARC or not to ARC?从 Objective-C 开始:到 ARC 还是不到 ARC?
【发布时间】:2011-12-17 05:03:21
【问题描述】:

根据Apple's ARC Documentation,在使用 ARC 时开发软件的方式发生了相当多的变化。

作为 Objective-C 的初学者,最好从禁用 ARC 开始,这样我可以更好地了解幕后发生的事情?还是 ARC 从本质上弃用了“旧方式”做事,以至于不值得花时间学习?

【问题讨论】:

  • 感谢所有的回复,他们都非常有帮助!
  • 回到当这个问题第一次被问到时,有充分的理由对这个决定动摇。但是到目前为止,ARC 已成为既定事实,并且您在网络上找到的几乎所有代码示例(最近的来源)都将假定为 ARC。大喊一声“我爱老大哥”,顺其自然。

标签: objective-c automatic-ref-counting


【解决方案1】:

这基本上是一个意见问题,因此相当危险。

我的意见是肯定的。值得学习基本的内存管理。资格是不要陷入困境。通过一些非常简单的项目了解 ARC 在幕后为您做了什么。一旦您对如何处理内存管理有了基本的了解,即如何避免保留周期(正如 jemmons 所暗示的那样,它们仍然可能是 ARC 的问题)。 一旦你对内存管理有了基本的了解。开始使用 ARC。

正如 Jason Coco 指出的那样,ARC 为(简单地说)NSObject 子类处理内存管理。因此,如果您需要使用它们,您仍将自己处理所有 CF 对象。

WWDC2011 Session 323 - Introducing Automatic Reference Counting 中可以找到关于 ARC 在幕后为您做什么的精彩解释。

但还有一些其他因素可能会影响您的决定。

您需要定位哪些设备?

如果您计划以 iOS 4.3 及更高版本为目标,ARC 可以有效地为您处理内存管理。(NSObject 子类)

如果您计划以 iOS 4.2 为目标,那么您将无法使用 weak 引用(您将使用 unsafe_unretained)。 iPhone 3g? & iPod touch 2nd gen 停留在这个操作系统级别,因为这些设备中有许多仍在使用中,许多开发人员仍在瞄准它们。

如果您计划在 4.2 之前定位 iOSs(这种情况很少见),您肯定需要学习 MRC(手动引用计数)。

如果您计划构建 Mac 应用程序,那么该平台上有一个可用的垃圾收集器。 ARC 也是一个选项(完整的 ARC 10.7,没有弱支持 10.6)。

【讨论】:

    【解决方案2】:

    值得注意的是,当您在 Xcode 中启动新项目时,默认情况下会检查 ARC。这与旧的 retain/release 做事方式已被弃用,Apple 将 ARC 视为未来的任何迹象一样好。作为一名新的 ObjC 开发人员,您的第一课可能是逆流而上对抗 Apple 永远不会有任何回报。

    此外,虽然将旧的 retain/release 样本转换为 ARC 相当容易(在大多数情况下,只需删除任何 retains、releases 和 autoreleases),反之亦然不是真的。而且我已经看到了很多以 ARC 风格编写的示例代码。因此,对于刚起步的人来说,学习 ARC 方式会付出更多的代价。

    请注意,这并不意味着您不必了解引用计数。它仍然是对象生命周期的重要组成部分,您仍然需要注意这些事情(如果只是知道何时使用weakstrong 引用)。但是当需要编写代码时,请在 ARC 上编写它。

    【讨论】:

      【解决方案3】:

      “旧”样式只是引用计数来管理对象的生命周期。它实际上并没有那么多,但它可能容易出错并引起各种悲伤。如果您刚刚开始,我个人建议您学习使用 ARC 进行编程。当您需要使用 C 库对象(如 CoreFoundation 或 CoreGraphics)时,您仍然需要处理引用计数。

      【讨论】:

        【解决方案4】:

        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

        【讨论】:

          【解决方案5】:

          回顾一下并了解正在发生的事情是个好主意,但对于开发来说这不是必需的,而且正如您所看到的,大多数(如果不是所有)开发人员都已将他们的部署目标移至 iOS 5.0+,所以您是可能不会在手动引用计数下开发。

          但是,如果您打算在 CFStringRef 之类的代码中使用非 ROP(可保留对象指针),您可能需要真正了解非 ARC,以便了解桥之类的东西,因为您可以将 ARC 和非 ARC 代码合二为一项目。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-10-21
            • 2011-11-01
            • 2012-06-01
            • 1970-01-01
            • 2014-03-22
            • 1970-01-01
            • 2012-02-04
            相关资源
            最近更新 更多