9

我不确定瞬态属性的正确定义:

  1. 可以在对象模型中定义瞬态属性,然后在需要时在相关类中计算它们。
  2. 但是,如果您指定一个类并为任何瞬态属性定义任意 getter 方法而不在对象模型中声明它(只要实体链接到模型中的该类),那么事情也同样有效。

我的问题:在对象模型中声明瞬态属性有什么好处?我只看到一个缺点:每次添加一个瞬态属性(例如“FormattedDate”)时,persistentStore 就会变得不兼容。

我错过了什么?

4

1 回答 1

6

核心数据编程指南

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

我认为这意味着“方便”和“将所有属性定义在一个地方 - 托管对象模型”。

至于 MOM 版本控制,核心数据模型版本控制和数据迁移编程指南说:

Core Data 对版本控制的看法是,它只对影响持久性的模型特性感兴趣。

然而,它并没有阐明它对瞬态特性的立场。事实上,阐述该段落的第二个要点听起来几乎是自相矛盾的。一个快速测试(新项目带有一个简单的“Foo”实体和一个“name”属性,保存一个包含多个 foo 的文件,添加一个临时属性,再次运行,并且 foo 全部加载,添加一个新的 foo,保存,关闭, re-open) 显示瞬态属性实际上不被版本控制系统考虑。

于 2009-11-14T13:53:55.050 回答