109

作为一个初学 iPhone 程序员,编写适用于 iOS 5 或更早版本的应用程序的最佳实践是什么?具体来说,我应该继续使用数据的发布/保留,还是应该忽略它?有关系吗?

4

7 回答 7

170

对于仍然对如何在单个文件上关闭 ARC 感到好奇的人,这就是我所做的:

  1. 转到您的项目设置,在Build Phases > Compile Sources
  2. 选择要禁用 ARC 的文件并添加-fno-objc-arc编译器标志。您可以通过选择文件然后按“Enter”键一次为多个文件设置标志。

我不知道这是否是推荐的方式,但它对我有用。

PS:我在这里从 clang.llvm.org 收集了这些信息,该信息是可公开访问的,因此不受 NDA 约束。

于 2011-06-21T18:05:47.070 回答
98

由你决定。您可以使用 ARC(自动引用计数)编写应用程序,Xcode 将编写“粘合代码”以允许您启用 ARC 的应用程序在 iOS 4 上运行,无需修改。但是,某些事情不会起作用,最明显的是,您可能希望使用的许多库(有时)会抛出无数错误,并且在开发人员发布与 ARC 兼容的更新之前,您将无法使用它们。


编辑:我最近发现您可以按文件关闭 ARC。请参阅pixelfreak的回答。所以,我的建议仍然有效,但现在不需要更新第 3 方库即可与 ARC 一起使用。

以下是 Apple 关于为特定文件选择退出 ARC 的说明:

当您迁移项目以使用 ARC 时,-fobjc-arc 编译器标志设置为所有 Objective-C 源文件的默认值。您可以使用该类的 -fno-objc-arc 编译器标志为特定类禁用 ARC。在 Xcode 中,在目标 Build Phases 选项卡中,打开 Compile Sources 组以显示源文件列表。双击要设置标志的文件,在弹出面板中输入-fno-objc-arc,然后单击完成。

在此处输入图像描述

在此处查看完整的过渡指南。

于 2011-06-10T15:28:14.693 回答
10

iOS 5 仍处于保密协议下,并且可能会在他们发布公共版本之前。如果您有开发者帐户,请前往Apple 开发者论坛并在那里提问。

对于以前的版本,您必须计算引用并相应地保留和释放。查看内存管理指南

编辑:这是自动引用计数的公共规范和公共 iOS 5 页面的引用:

Objective-C 的自动引用计数 (ARC) 使内存管理成为编译器的工作。通过使用新的 Apple LLVM 编译器启用 ARC,您将无需再次键入 retain 或 release,从而大大简化了开发过程,同时减少了崩溃和内存泄漏。编译器全面了解您的对象,并在每个不再使用的对象立即释放它,因此应用程序运行速度与以往一样快,性能可预测且流畅。

于 2011-06-10T15:23:37.840 回答
4

细节目前尚不清楚/在 NDA 下,但 Apple 已在 iOS 5 中实施自动引用计数 (ARC),详情如下:http: //developer.apple.com/technologies/ios5/

如果您使用 iOS 5 SDK 在 Xcode 4 中开发新应用程序,您可以放心地忽略保留/释放计数。

[编辑] sudo rm -rf 提出了一个很好的观点;第三方库可能会受到重大影响

于 2011-06-10T15:23:52.893 回答
3

没有人提到SystemConfiguration.framework?请不要忘记将其放入Frameworks中。我悲惨地花了几个小时才意识到这一点。

于 2012-01-10T01:07:16.170 回答
3

这当然是开发人员或团队的选择。ARC(自动引用计数器)通过为您自动管理内存使事情变得更容易。它将在适当的时候释放、保留和解除分配。如果您还没有的话,我相信您最好在测试应用程序中获得自己管理内存的经验。要考虑的另一件事是您的应用程序是否依赖第三方库,如果不转换为 ARC 将阻止您的应用程序编译。选择显然取决于手头的情况。

于 2012-11-29T19:51:12.373 回答
0

在项目设置>构建阶段>编译源中将标志设置为-fno-objc-arc

于 2014-05-20T14:19:08.433 回答