保留关键字不会在 Xcode 4.6 ARC 项目中抛出编译器错误?

Retain keyword not throwing compiler error in Xcode 4.6 ARC project?

我刚刚在客户现场开始新合同。

我正着手开发由 Android 开发人员编写的应用程序原型,他是 Objective-C 的新手。 (他已经离开公司,所以他不能提问。)

该项目是使用 ARC 在 Objective-C 中编写的。其中一个文件的属性声明为

@property (nonatomic, retain, readonly) <class> *<name>;

(其中 <class><name> 替换为每个 属性 的实际 class 和 属性 名称。)

过去,当我尝试在 ARC 项目中包含手动引用计数代码时,编译器会在 retain 关键字上抛出错误。然而,在这个项目中,它并没有抱怨。

我检查了一下,文件没有设置为手动引用计数编译。

我编辑了 属性 定义并将单词 retain 替换为 strong,这也编译了。

Apple 最近是否更改了编译器,以便 retain 成为 ARC 中 strong 的同义词?相反,在使用手动引用计数编译的文件中,strongretain 的同义词吗?

如果是这样,此更改是何时进行的?

好吧,它没有特别详细的记录,但是这个 ARC transitioning doc 指出:

// The following declaration is a synonym for: @property(retain) MyClass *myObject;
@property(strong) MyClass *myObject;

请注意 同义词,这意味着 retainstrong 属性的含义相同。

来自文档 Clang 3.8 文档 Property declarations 部分:

retain implies __strong ownership.

据我所知,retain 在 属性 语句中一直是 strong 的同义词。

这只是 属性 语句中的一个关键字,没有理由暗示这会在其他用法中作为两者之间的一般等价物继承。它所做的是让从 pre-ARC 到 ARC 的转换更容易一些。