Xcode 4.2.1 ARC问题

时间:2012-02-13 16:12:53

标签: xcode attributes properties default automatic-ref-counting

仅限iOS5且启用ARC的项目在Xcode 4.3.1 beta上编译。在4.2.1上编译时。 LLVM会抛出这样的警告:

  

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

所以属性定义如下所示:

@property (nonatomic) NSObject* object

在Build Settings中启用了ARC。添加强大的属性会修复此警告,但这应该是默认对吗?

处理这些属性默认值的Xcode版本之间是否存在差异?

由于 岸堤

1 个答案:

答案 0 :(得分:4)

这不是特定于测试版的Xcode 4.2.1具有相同的行为(测试版属于NDA,只能在苹果的开发者论坛中合法讨论):

“强”是ivar的默认设置。对于ivars,如果您需要__unsafe_unretained__weak,则必须指定。

在属性声明中指定属性始终是最佳做法。弹出最快的一个例子是UILabel属性文本,定义为:

@property(nonatomic,copy) NSString *text; // default is nil

在这个示例中,copy属性告诉我可以将NSMutableString引用传递给标签,它将复制,我可以继续改变字符串,标签将保持不变。行为已明确界定。

我怀疑这是明确定义的行为,这是ARC编译器强制您指定存储属性的最主要原因。请记住,新的运行时无需为属性声明ivars,而@synthesize用于访问器方法,可以想象,如果您不小心保留了委托,您将注意到属性声明。

同时考虑一个项目中的一些类可能被排除在ARC之外的可能性,在这些情况下内部实现对ARC完全不透明。