对于我未合成的属性,我是否需要ARC关键字?

bor*_*den 6 properties ios xcode4.2 automatic-ref-counting

我有一个我没有合成的属性,而是我自己创建了一个getter和setter.因此,我假设ARC关键字(强或弱)没有意义,所以我将它们消除.这在Xcode 4.3上运行良好,但是当我的同事在XCode 4.2上打开它们时,编译器抱怨没有强/弱关键字,所以我指示他再次无意义地输入关键字.哪个是正确的(有或没有关键字)?

要明确:我有一个像这样的属性,@property (nonatomic) NSString *foo并在我实现的.m文件中-(NSString *)foo,-(void)setFoo:(NSString *)foo并且不包含@synthesize foo.另一个相关细节是没有相应的iVar,而是属性与Core Data对象交互.除非我在关键字中添加strong或弱,否则不会在XCode 4.2中编译.

编辑我想到了一个更相关的事情,其中​​一个属性是在协议上,我不知道这是否有所作为.

lna*_*ger 1

您引用的声明属性是可选的。引用文档:

\n\n
\n

属性声明和实现
\n @property 指令声明一个属性。一组可选的带括号的属性提供有关属性的存储语义和其他行为的附加详细信息 - 请参阅 \xe2\x80\x9c 属性声明属性\xe2\x80\x9d 了解可能的值。

\n\n

属性声明属性
\n 您可以通过使用 形式来用属性\n 修饰属性@property(attribute [, attribute2, ...])。\n 与方法一样,属性的作用域为其封闭的接口\n 声明。对于使用逗号分隔的变量名列表的属性声明,属性特性适用于所有命名的属性。

\n\n

如果您使用该@synthesize指令告诉编译器创建访问器方法(请参阅\xe2\x80\x9c属性实现指令\xe2\x80\x9d),则它生成的\n代码将与关键字给出的规范相匹配。如果您自己实现访问器方法,则应确保它与规范匹配(例如,如果您指定复制,则必须确保复制 setter 方法中的输入值)。

\n
\n\n

如果您随后使用@dynamic而不是@synthesize它,则告诉编译器您将编写自己的方法,并防止编译器在找不到合适的方法时抱怨。

\n\n

更多信息可以在这里找到。

\n