Xcode 4.2.1 ARC问题

3

一个仅支持iOS5且启用ARC的项目可以在Xcode 4.3.1 beta上编译。但是,在4.2.1上编译时,LLVM会抛出如下警告:

"ARC禁止合成未指定所有权或存储属性的Objective-C对象的属性"

因此,属性定义应该像这样:

@property (nonatomic) NSObject* object

在构建设置中启用了ARC。添加强属性可以解决此警告,但这应该是默认设置,对吗?

Xcode版本在处理这些属性默认值方面是否有区别?

谢谢 安迪


Xcode 4.3已经发布。因此,属性定义不需要存储属性。Strong是默认值,以下内容可以正常工作。 @property (nonatomic) NSObject* object - abs
1个回答

4
这不是beta特定的行为,Xcode 4.2.1有相同的行为(beta应在苹果开发者论坛中进行讨论)。对于ivar,Strong是默认设置。对于ivar,如果你想要__unsafe_unretained或__weak,你必须指定。在属性声明中指定属性一直是最佳实践。一个最快想到的例子是UILabel属性文本,定义为:
@property(nonatomic,copy) NSString *text; // default is nil

在这个例子中,copy属性告诉我可以将NSMutableString的引用传递给标签,它会创建一个副本,我可以继续改变字符串,而标签仍然保持不变。该行为已经明确定义。
我猜测这个明确定义的行为可能是ARC编译器强制要求指定存储属性的最主要原因。请记住,由于新运行时可以消除为属性声明实例变量和@synthesize访问方法的需要,所以如果您意外保留了委托,则属性声明可能是唯一注意到此类问题的地方。
另外,请考虑项目中的几个类可能会被排除在ARC之外,在这种情况下,它们的内部实现对于ARC来说完全不透明。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接