Core Data 和 Swift 中的计算属性与持久存储

Posted

技术标签:

【中文标题】Core Data 和 Swift 中的计算属性与持久存储【英文标题】:Computed properties vs. persistent storage in Core Data and Swift 【发布时间】:2015-10-22 04:05:04 【问题描述】:

我觉得这是一个愚蠢的问题,但我是新手,找不到明确的答案。

我有一个 Activity 实体和一个 Sessions 实体。每个 Activity 可以有多个 Session。每个 Session 都有一个 duration 属性。

现在我想要一个活动的平均会话持续时间。我应该向我的 Activity 实体添加一个 averageSessionDuration 属性并在用户添加或删除会话时对其进行更新和持久化,还是我可以将一个计算属性添加到我的 Activity 类并让它在调用时计算平均会话持续时间?

我猜使用计算属性计算的平均会话持续时间会比必要的多一点,但我不知道这是否重要,最终会有所不同吗?

我不知道幕后发生了什么,获取每个会话持续时间并取平均值比仅获取在必要时更新并保持不变的 averageSessionDuration 属性要贵得多?在这种情况下,最佳实践是什么?我还缺少什么吗?

提前致谢,

丹尼尔

【问题讨论】:

好问题。 @Animal 是对的。计算的属性会更清晰,并且不太可能不正确。只有在观察到实际性能影响时才使用存储平均值。 【参考方案1】:

它很可能不会对性能产生任何影响,但如果您使用计算属性而不是在保存其他值时尝试确保它始终是最新的,它会是更简洁的代码(我认为)。

如果您担心性能问题,您可以随时缓存每个会话的计算值,并在您更改应用中的值时使缓存无效。这可能是两个世界中最好的。

这是一个品味问题,我相信双方都有支持的论据。

【讨论】:

感谢您的回答!这是我的第一个想法,但我想知道这是否不仅仅是我懒惰。【参考方案2】:

如果您要获取该属性,那么您将希望保留它。这是假设一个 SQLite 存储。

如果你永远不会从中获取数据,那么计算属性会更干净。

这是做出该决定的唯一重要问题。

【讨论】:

它是一个计算属性。谢谢! 这是更好的答案。复选标记应该属于你 @Animal 好吧,你会因为帮助和成为绅士而获得支持。 ;)

以上是关于Core Data 和 Swift 中的计算属性与持久存储的主要内容,如果未能解决你的问题,请参考以下文章

合并具有相同属性但 ID 不同的 NSManagedObject,与 iCloud 同步会导致重复(Core Data,Swift 1.2)

Swift Core Data:Core Data 中的枚举 [重复]

使用 Swift 和 Core Data 的多对多附加数据

在 Swift 中使用 Core Data 在表格视图的部分中显示数据

如何将日期类型保存到 Swift Core Data 中实体的属性?

如何在 Swift 中将可转换属性保存到 Core Data