NSManagedObject:我应该使用瞬态还是普通的@property?

时间:2011-12-31 22:12:33

标签: core-data nsmanagedobject transient

为什么不使用常规的@property而不是瞬态?我不关心支持撤销。

1 个答案:

答案 0 :(得分:3)

如果你不需要撤销,那么普通的未建模@property很有可能会更好。将属性明确建模为瞬态时,主要区别在于:

  • 设置属性会将对象标记为脏,即使实际上没有保存任何内容;
  • 当对象变成故障时,属性被清除;
  • 合并更改时可能会发生奇怪的事情,具体取决于您选择的合并策略。

Jakob Stoklund Olesen在https://web.archive.org/web/20160423093331/http://www.2pi.dk/tech/cocoa/transient_properties.html可以找到一些实验来计算瞬态建模属性的语义。因为这是一个垂死的archive.org链接,我将摘录一些选择花絮:

  • “瞬态属性......您应该将其视为持久存储中值为nil的

  • “那么什么是瞬态属性??[for]任何你不需要存储的属性,但是想要撤消支持。”

  • “另一种用途......是缓存无法存储的属性。具有不支持类型的跨存储关系和属性是典型示例。在保存之前,您将属性转换为可以存储的属性,并将其写入二进制'shadow'属性。“

  • “最好将瞬态属性想象为代表'持久存储中的nil',而不是使用undo'的常见'花式实例变量'。”

一篇好文章,我希望雅各布把它留下来。