这些符号(-fno-objc-arc)是什么意思?

4

我在我的项目中有些代码应用了ARC编码风格,而有些则没有。后来我发现有一种解决方法,可以设置一些符号或标记:-fno-objc-arc。

我的问题是,这些标记是什么?这些符号-fno-objc-arc代表什么意思?还有其他类似的吗?

2个回答

7
-fno-objc-arc 标志是给编译器使用的,而不是链接器。它告诉编译器,你的 Objective C 代码将会手动进行释放和保留。这是必要的,因为新添加的 ARC 模式禁止显式使用 retain, release, autorelease, dealloc 等等;即使通过选择器也无法调用它们。
将所有代码转换为 ARC 可能是一个繁重的任务,所以编译器支持旧的和新的代码风格。你必须告诉编译器你正在编译的文件是旧的还是新的;你需要通过传递 -fno-objc-arc 标志来实现。
还有许多其他编译器标志。它们让你控制代码的编译和优化方式、错误和警告返回到你的方式、头文件所在的路径等等。在终端窗口中键入 man gcc 来查看编译器选项列表。

谢谢,顺便问一下,我需要将这个-fno-objc-arc放在一行中吗?因为我还有另一个标志-Objc,所以我猜想-fno-"objc"-arc部分也是一样的.. 另外,对于编译器来说,将其添加到"其他链接器标志"中是否正确? - Vincent Bacalso
1
@BacalsoVincent 把这个内容加到链接器标志里是不正确的,应该加到编译器标志里。这里有一个回答解释了在Xcode中添加此标志的正确程序。我不确定是否需要将此标志与其他标志放在同一行上:可能会出现Xcode在发送标志到编译器之前删除换行符的情况。 - Sergey Kalinichenko

0

ARC代表自动引用计数。以下是从苹果开发者网站摘取的一些信息:

自动引用计数

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

在编译旧的、不符合规范的代码时,禁用ARC是相当常见的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接