目标 C语言 当我不为核心数据标量属性编写访问器方法时会发生什么情况?



我正在处理几个用于生成NSManagedObject子类的Core Data实体,在生成这些类时,我选择了"为基本数据类型使用标量属性"选项。正如预期的那样,在生成的接口中,整数属性被声明为int16_t属性,浮点属性被声明为float属性:

@interface TeamStats:NSManagedObject
@property (nonatomic) int16_t pointsScored;
@property (nonatomic) float winPercentage;
@end

在为这个接口生成的实现中,我看到用@dynamic声明了这些属性:

@implementation TeamStats
@dynamic pointsScored;
@dynamic winPercentage;
@end

现在,根据Core Data文档,我应该需要为这些标量属性编写访问方法,因为Core Data不能为我生成它们:

可以将属性声明为标量值,但Core Data不能将其声明为标量值动态生成访问器方法——您必须提供自己的实现(参见"托管对象访问方法"(第44页))。Core Data自动合成原始访问器方法(primitiveLength和setPrimitiveLength:)),但您需要声明它们以抑制编译器警告。

这些都是有意义的,我可以看到许多关于如何编写这些访问器方法的帖子,有很多很好的答案。

我不明白的是:我写了这段代码并开始使用它之前,我从来没有读过文档中的细节,所以我从来没有写过任何访问器方法。我只是在我的类实现中有@dynamic声明。尽管没有编写我应该需要的访问器方法,但代码似乎工作得很好。我已经创建了NSManagedObject子类的实例。我已经向该类的实例发送了一个setPointsScored:和一个pointsScored消息,并将结果实例保存到它的持久性存储中。一切似乎都很顺利。

我在这里错过了什么?不管Core Data文档怎么说,是否会生成默认实现?是否会有我当前的代码不能工作的情况,我需要意识到?在编写更多NSManagedObject子类之前,我很想了解这里发生了什么…

为基本数据类型创建标量访问器是Xcode 4引入的一个特性,但显然没有很好的文档。在WWDC 2011会议视频中提到

  • "303 iOS核心数据的新特性"(幻灯片95)
  • "315核心数据在Mac OS X上的新功能"(幻灯片90)

根据这些会话的信息,标量访问器避免了构造NSNumber对象的开销,因此它们比"核心数据编程指南"中所示的实现更有效。

那么回答你的问题:标量属性的默认访问器是自动生成的。关于这个特性,"核心数据编程指南"已经过时了

相关内容

最新更新