保留关键字不会在 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
的同义词?相反,在使用手动引用计数编译的文件中,strong
是 retain
的同义词吗?
如果是这样,此更改是何时进行的?
好吧,它没有特别详细的记录,但是这个 ARC transitioning doc 指出:
// The following declaration is a synonym for: @property(retain) MyClass *myObject;
@property(strong) MyClass *myObject;
请注意 同义词,这意味着 retain
和 strong
属性的含义相同。
来自文档 Clang 3.8 文档 Property declarations 部分:
retain implies __strong ownership.
据我所知,retain
在 属性 语句中一直是 strong
的同义词。
这只是 属性 语句中的一个关键字,没有理由暗示这会在其他用法中作为两者之间的一般等价物继承。它所做的是让从 pre-ARC 到 ARC 的转换更容易一些。
我刚刚在客户现场开始新合同。
我正着手开发由 Android 开发人员编写的应用程序原型,他是 Objective-C 的新手。 (他已经离开公司,所以他不能提问。)
该项目是使用 ARC 在 Objective-C 中编写的。其中一个文件的属性声明为
@property (nonatomic, retain, readonly) <class> *<name>;
(其中 <class>
和 <name>
替换为每个 属性 的实际 class 和 属性 名称。)
过去,当我尝试在 ARC 项目中包含手动引用计数代码时,编译器会在 retain
关键字上抛出错误。然而,在这个项目中,它并没有抱怨。
我检查了一下,文件没有设置为手动引用计数编译。
我编辑了 属性 定义并将单词 retain
替换为 strong
,这也编译了。
Apple 最近是否更改了编译器,以便 retain
成为 ARC 中 strong
的同义词?相反,在使用手动引用计数编译的文件中,strong
是 retain
的同义词吗?
如果是这样,此更改是何时进行的?
好吧,它没有特别详细的记录,但是这个 ARC transitioning doc 指出:
// The following declaration is a synonym for: @property(retain) MyClass *myObject;
@property(strong) MyClass *myObject;
请注意 同义词,这意味着 retain
和 strong
属性的含义相同。
来自文档 Clang 3.8 文档 Property declarations 部分:
retain implies __strong ownership.
据我所知,retain
在 属性 语句中一直是 strong
的同义词。
这只是 属性 语句中的一个关键字,没有理由暗示这会在其他用法中作为两者之间的一般等价物继承。它所做的是让从 pre-ARC 到 ARC 的转换更容易一些。