2009-11-14 93 views
8

我不确定瞬态特性的正确定义:何时应该将CoreData中的瞬态属性包含在对象模型中?

  1. 可以定义对象模型中的瞬态特性,然后需要在相关的类时,计算它们。如果指定一个类(如实体链接到类模型长)定义为任何瞬态特性任意getter方法没有对象模型,宣布它
  2. 但事情一样好。

我的问题:在对象模型中声明瞬态属性有什么好处? 我只看到一个不利的方面:每次添加一个短暂的财产(例如“FormattedDate”)的persistentStore变得不兼容。

我错过了什么?

回答

6

Core Data Programming Guide

如果不支持的属性是一个对象,然后在管理对象模型,你可以指定其类型为不确定的,而且它是短暂的。在实现实体的自定义类时,不需要为该属性添加实例变量,您可以使用托管对象的私有内部存储。关于下面描述的实现需要注意的一点是它们缓存瞬态值。这使访问价值更有效率 - 这也是变更管理所必需的。如果您定义了自定义实例变量,则应该在didTurnIntoFault中清理这些变量,而不是dealloc或finalize。

我认为这是为了表示“方便”和“将所有属性定义在一个地方 - 管理对象模型”。

至于MOM版本中,Core Data Model Versioning and Data Migration Programming Guide说:在版本

核心数据的观点是,只有在影响持久性模型的功能感兴趣。

它没有明确其对瞬态特性的位置,但是。实际上,阐述该段落的第二个要点几乎听起来像是一个矛盾。快速测试(用一个“名称”属性的简单的“富”实体的新项目,保存文件与几个FOOS,添加临时属性,再次运行,并且FOOS所有负载,添加新富,保存,关闭,重新打开)显示瞬态属性实际上并未被版本控制系统考虑。

+1

感谢您的澄清。我也再次测试了这一点。我显然是错的:向模型添加瞬态属性不会导致不兼容的商店。似乎也有一个提高效率的论点。我还没有理解缓存的工作原理。如果我有例如一个CLLocationCoordinate2D属性,并且getter方法只是从两个双lat/long创建它,Core-Data如何缓存结果值? – FelixLam 2009-11-14 18:33:20

+0

不知道,但是这可能是值得测试:“有两个用于获取和设置瞬时值的两个策略可以获取临时值不是‘懒惰’......或awakeFromFetch期间......这可能是最好如果值很大,则可以长时间检索它...对于永久值,可以在每次瞬变值更改时更新它(...,或者可以推迟更新直到保存对象...“(修剪以适合) – 2009-11-14 20:08:00

相关问题