【问题标题】:NSManagedObject: Should I use transient or a regular @property?NSManagedObject:我应该使用瞬态还是常规@property?
【发布时间】:2012-01-31 05:27:26
【问题描述】:

为什么不直接使用常规的@property 而不是瞬态的?我不在乎支持撤消。

【问题讨论】:

  • 标题中的“transformable”是“transient”的错字吗? (假设是这样,我正在输入一个答案。)

标签: core-data nsmanagedobject transient


【解决方案1】:

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

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

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

  • “一个瞬态属性...您应该将其视为在持久存储中其值为 nil 的东西。

  • “那么瞬态属性有什么用?...[适用于]您不需要存储但希望撤消支持的任何属性。”

  • “另一个用途……是缓存不能存储的属性。跨存储关系和不支持类型的属性就是典型的例子。在保存之前,将属性转换为可以存储的东西,并将其写入二进制 'shadow' 属性。”

  • “最好将瞬态属性想象为代表‘在持久存储中为 nil 的东西’,而不是常见的‘具有撤消功能的精美实例变量’。”

一篇很好的文章,我希望 Jakob 没有留下它。

【讨论】:

  • 链接现在断开了:(
猜你喜欢
  • 2019-06-13
  • 1970-01-01
  • 1970-01-01
  • 2013-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-05
  • 2012-01-07
相关资源
最近更新 更多