Core data 为什么我要使用transient属性来表示核心数据中的派生只读属性?

Core data 为什么我要使用transient属性来表示核心数据中的派生只读属性?,core-data,transient,Core Data,Transient,如果派生属性是只读的,是否有任何理由为其建模瞬态属性?在自定义类中声明一个属性,然后在getter中动态计算该值似乎要容易得多。我会将其与KeyPathSforvaluesFecting结合起来,以告知观察者有关更改的信息。 如果我需要缓存,我只需要为属性添加一个ivar,并在基础值发生变化时重置它(如问题答案中所建议的) 将其建模为瞬态属性有什么好处吗?事实上,我正是这么做的,因为核心数据编程指南中有这样一句话,“考虑一个应用程序,其中您有一个Person实体,具有属性firstName和la

如果派生属性是只读的,是否有任何理由为其建模瞬态属性?在自定义类中声明一个属性,然后在getter中动态计算该值似乎要容易得多。我会将其与KeyPathSforvaluesFecting结合起来,以告知观察者有关更改的信息。 如果我需要缓存,我只需要为属性添加一个ivar,并在基础值发生变化时重置它(如问题答案中所建议的)


将其建模为瞬态属性有什么好处吗?

事实上,我正是这么做的,因为核心数据编程指南中有这样一句话,“考虑一个应用程序,其中您有一个Person实体,具有属性firstName和lastName,以及一个缓存的瞬态派生属性fullName”。这就是我认为我想到这将是一件好事的地方

然而,它接着说,“(实际上,可能不太可能缓存全名属性,但该示例很容易理解)。”,让我知道这实际上只是他们描述的示例,但可能不是很好的实现

因此,在阅读了更多关于瞬态特性及其预期用途的内容后,我意识到这可能是一种不好的使用它们的方法。将其缓存到实现中并没有给我带来任何好处。我确实喜欢使用“点”表示法(因为它是一个属性)而不必向对象发送消息,但我不相信使用它会带来任何性能提升

更重要的是,我认为将其作为托管对象上下文必须跟踪的属性的开销实际上使其成为一件坏事

因此,我将重构我的应用程序,现在在我的managedObject实体的子类上创建这些简单的实例方法,并返回结果,因为我看不到将它们创建为瞬态属性的真正好处

使用其中一种的原因是,当您实际需要持久化不适合某个managedObject类型的内容时。但是,然后基本上创建两个属性。一种是暂时的,是对象的真实表示,为其编写getter和setter;另一种是二进制数据类型,仅由核心数据实体子类在内部用于在存储对象中持久化其他对象值


至少这是我对这一切如何运作的理解。如果我有任何错误,欢迎发表评论,因为这也让我很困惑。

谢谢。我在四处寻找关于“瞬态属性”和“派生属性”的解释。你帮助我理解了这一点。我同意大多数情况下,用例是:“使用其中一个的原因是,当您实际需要持久化不适合某个managedObject类型的内容时。”