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

时间:2015-08-28 13:07:48

标签: ios objective-c xcode automatic-ref-counting

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

我开始研究由Objective-C新手的Android开发人员编写的应用程序原型。 (此后他离开了公司,所以他无法提问。)

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

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

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

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

我检查了,并且文件未设置为使用手动引用计数进行编译。

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

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

如果是,那么这个改变是什么时候?

2 个答案:

答案 0 :(得分:1)

嗯,它没有特别好记录,但这ARC transitioning doc个州:

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

请注意同义词这个词,这意味着retainstrong属性意味着同样的事情。

答案 1 :(得分:1)

从文档Clang 3.8文档Property declarations部分:

  

保留意味着__strong所有权。

据我所知,retain一直是属性声明中strong的同义词。

这只是属性声明中的一个关键字,没有理由暗示这在其他用法中作为两者之间的一般等价物。它的作用是使从ARC之前到ARC的转换更加容易。