我刚开始在客户现场签订新合同。
我开始研究由Objective-C新手的Android开发人员编写的应用程序原型。 (此后他离开了公司,所以他无法提问。)
该项目使用ARC在Objective-C中编写。其中一个文件的属性声明为
@property (nonatomic, retain, readonly) <class> *<name>;
(其中<class>
和<name>
将替换为每个属性的实际类和属性名称。)
过去,当我尝试在ARC项目中包含手动引用计数代码时,编译器会在retain
关键字上抛出错误。然而,在这个项目中,它并没有抱怨。
我检查了,并且文件未设置为使用手动引用计数进行编译。
我编辑了属性定义,并将retain
替换为strong
,并编译。
Apple最近是否更改了编译器,以便retain
是ARC中strong
的同义词?相反,strong
是一个用手动引用计数编译的文件中retain
的同义词?
如果是,那么这个改变是什么时候?
答案 0 :(得分:1)
嗯,它没有特别好记录,但这ARC transitioning doc个州:
// The following declaration is a synonym for: @property(retain) MyClass *myObject;
@property(strong) MyClass *myObject;
请注意同义词这个词,这意味着retain
和strong
属性意味着同样的事情。
答案 1 :(得分:1)
从文档Clang 3.8文档Property declarations部分:
保留意味着__strong所有权。
据我所知,retain
一直是属性声明中strong
的同义词。
这只是属性声明中的一个关键字,没有理由暗示这在其他用法中作为两者之间的一般等价物。它的作用是使从ARC之前到ARC的转换更加容易。