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

问题描述 投票:2回答:1

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

core-data nsmanagedobject transient
1个回答
3
投票

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

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

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

  • “一个短暂的属性......你应该把它看作持久存储中价值为零的东西。”
  • “那么什么是瞬态属性呢?... [对于]你不需要存储的任何属性,但是想要撤消支持。”
  • “另一种用途......是缓存无法存储的属性。跨存储关系和具有不受支持类型的属性是典型示例。在保存之前,您将属性转换为可以存储的内容,并将其写入二进制'阴影'属性。“
  • “最好将瞬态属性想象为代表'持久存储中的nil',而不是使用undo'的常见'花式实例变量'。”

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

© www.soinside.com 2019 - 2024. All rights reserved.