【问题标题】:Xcode 4.2.1 ARC issueXcode 4.2.1 ARC 问题
【发布时间】:2012-03-05 01:14:28
【问题描述】:

仅适用于 iOS5 且启用 ARC 的项目可在 Xcode 4.3.1 beta 上编译。在 4.2.1 上编译时。 LLVM 发出如下警告:

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

所以属性定义如下所示:

@property (nonatomic) NSObject* object

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

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

谢谢 安迪

【问题讨论】:

  • Xcode 4.3 发布了。所以属性定义不需要存储属性。强是默认的,以下工作没有问题。 @property (nonatomic) NSObject* object

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


【解决方案1】:

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

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

在属性声明中指定属性一直是最佳实践。最容易想到的一个例子是UILabel 属性文本,定义为:

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

在本例中,copy 属性告诉我,我可以将NSMutableString 引用传递给标签,它会进行复制,我可以继续改变字符串,标签将保持不变。行为是明确定义的。

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

还要考虑项目中的一些类可能已从 ARC 中排除的可能性,在这些情况下,内部实现对 ARC 完全不透明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    相关资源
    最近更新 更多