【问题标题】:ARC or not to ARC iphone iOS5 [closed]ARC或不ARC iphone iOS5 [关闭]
【发布时间】:2012-02-03 16:05:24
【问题描述】:

我开发了一个 iPhone 应用程序,它应该支持基于 iOS4 和 iOS5 的 iPhone/iPad。

我的应用程序在几个地方泄漏了内存,由于代码的大小,这变得难以调试。我最近读到了 ARC(自动引用计数),我的查询是

  1. 我是否需要修改我的源代码(保留/释放/alloc/dealloc)才能使用 ARC 编译。 还有我们需要使用 ARC 执行哪些更改?

  2. 是否建议转为 ARC?

  3. 如果我使用 ARC,我的应用能否在 iOS4 手机上运行

谢谢。

【问题讨论】:

标签: iphone ios memory-management automatic-ref-counting


【解决方案1】:

需要明确的是,如果您的目标是 iOS 4,则不能使用 ARC 弱引用,可以仍然使用 unsafe_unretained,这基本上相当于使用 assign 作为对象特性。这意味着您可以将任何编写良好的非 ARC 代码转换为 ARC,而不会在 iOS 4 上意外创建保留周期。

通过使用unsafe_unretained,您将失去弱引用的自动空功能,但您仍然可以获得 ARC 的所有其他好处,例如不必担心忘记在您的 dealloc 语句中释放 ivars 等。

【讨论】:

    【解决方案2】:

    我绝对认为程序员了解内存管理以及系统的实际工作原理是一件好事……但是,我认为 ARC 是一个非常好的系统并且工作得非常好。这确实是一个意见问题,所以我认为几乎总是值得在 ARC 上启动针对 iOS 5 应用程序的新项目,除非在非常特殊的情况下。

    我觉得如果你在你的代码中使用了很多 C 库,那么现在使用 ARC 会有点困难(所以如果你主要使用第三方 C 库和诸如 CoreFoundation 之类的东西,你可能考虑它是否有意义),但即便如此,如果这些库大多与您的 Objective-C 控制器等隔离,ARC 仍然很好。

    对于较旧的应用,您需要查看应用的使用情况和模式。如果你使用很多委托方法,因为你不能在 iOS 4 上使用弱引用,它会变得有点棘手,你可能不得不混合使用 ARC 和非 ARC 代码。做出设计决定以继续使用 ARC 可能会更好。因此,新功能是为 iOS 5 设计的,可能在 iOS 4 版本的应用程序中不可用(或完全可用),而这些功能使用 ARC。

    真的,最终,这将取决于您的应用程序的设计方式、应用程序的大小以及您对托管内存管理和 ARC 的使用/限制的适应程度。例如,我有三个我永远不会转换为 ARC 的项目,一个我现在正在混合,一个完全转换(但仍然针对 iOS 4+)和 2 个完全支持 ARC 和 iOS 5+仅限。

    【讨论】:

    • OpenGL 在技术上是一个 C API,尽管没有任何类型的直接对象保留,因此不需要“桥”;所有对象都是内部的和不透明的,可以通过函数和整数 ID 访问。不过,在 ARC Obj-C 代码中使用 OpenGL 时有什么需要注意的吗?
    【解决方案3】:

    这可能不是发布此问题的最佳位置,但我会回答,因为我不介意问题在这里。

    http://developer.apple.com/library/mac/#releasenotes/ObjectiveC/RN-TransitioningToARC/_index.html

    1. 您将使用迁移工具“编辑 > 重构 > 转换为 Objective-C ARC”并手动修复工具无法解决的任何问题。

    2. 是的。

    3. 可以,但不会清零弱引用。

    【讨论】:

    • 另一个考虑因素是许多第三方库还没有好的 arc 版本。这使我无法升级我现有的一些项目。
    • 您可以在运行转换时有选择地从 ARC 中排除任何源文件。只需在 ARC 转换工具预检检查阶段取消勾选任何第三方类文件,它将跳过它们并用 -fno-objc-arc 标记它们,因此它们被排除在 ARC 验证之外。这是 ARC 的最佳功能之一 - 您可以在同一个项目中混合和匹配 ARC 和非 ARC 文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    • 2012-02-04
    • 1970-01-01
    • 2013-05-11
    • 2012-11-29
    • 2012-02-09
    • 1970-01-01
    相关资源
    最近更新 更多