11

我是 Objective-C 的新手,我尝试将用旧版本 Objective-C 编写的旧 Objective-C 项目移植到新项目,但我收到以下编译器错误:

ARC forbids explicit message send of 'retain'

in 
color = [aColor retain];
or 
color = [[NSColor blackColor] retain];

我正在阅读关于 clang 现在使用的新的自动引用计数。
我也尝试使用 Xcode 的重构功能,但没有运气......什么是正确的 Objective-C 代码需要替换这个旧代码?

4

3 回答 3

17

简单地:

color = [NSColor blackColor];

releaseARC 将管理您的对象的生命周期,因此您不需要retainautorelease不再需要。

于 2013-01-22T16:48:51.037 回答
11

ARC 的主要优点是编译器会自动清除您在项目中创建的所有对象的引用。所以不需要保留、释放和自动释放。但在某些情况下,我们希望从 ARC 发布我们的特定文件。在 xcode 中从 ARC 发布您的项目。请按照以下步骤操作。

1.Click your project for Build Phases.
2.Click the drop down menu named as "Compile Sources".
3.Double Click the file that you want to free from ARC.
4.Type the following to set the compiler flag.

       "-fno-objc-arc" 

此标志将从 xcode 中编译器的 ARC 释放该特定文件。

我希望这将对您的所有项目有所帮助。

于 2013-01-24T04:34:50.267 回答
3

只需删除保留,因此:

color = [NSColor blackColor]

使用 ARC,您不能使用retain, releaseautorelease因为它会为您使用。

于 2013-01-22T16:49:22.613 回答