核心数据 - 可选属性和性能

时间:2010-08-03 22:20:50

标签: core-data optimization

根据核心数据编程指南:

  

您可以指定属性   可选 - 也就是说,它不是必需的   有价值。但是,一般来说,   你不鼓励这样做   所以 - 特别是对于数值   (通常你可以获得更好的结果   使用强制属性   默认值 - 在模型中为0)。该   原因是SQL有   NULL的特殊比较行为   这与Objective-C的不同之处不同。空值   在数据库中与0不一样,   并且搜索0将不匹配   列为NULL。

我总是将数值设置为非可选,但不包含日期和字符串。在我的代码中,方便的是将日期和/或字符串的逻辑基于nil。

根据以上建议,我正在考虑让我的数据库中的所有内容都是非可选的。对于日期,我可以将模型默认值设置为0,对于字符串,模型默认值为nothing(“”)。然后,在我的代码中,我可以测试[date timeIntervalSince1970]的日期!= 0和string.length!= 0的字符串。

问题是,对于一个相对较小的数据库,从Core Data性能的角度来看,这真的很重要吗?如果有问题的属性永远不会通过谓词直接查询,那么权衡是什么?

1 个答案:

答案 0 :(得分:10)

我没有在中小型数据集上看到任何性能问题。我怀疑这是你在应用程序的性能阶段会遇到的问题。

我个人使用相同的非数字逻辑是可选的,如果它有意义,因为它确实使代码更容易,这反过来给了我更多的时间进行优化。