2010-08-03 28 views
8

每核心数据编程指南:核心数据 - 可选属性和性能

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

我一直让数字值非可选,但没有日期和字符串。在我的代码中,基于日期和/或字符串为零的逻辑是很方便的。

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

问题是,对于一个相对较小的数据库,这对Core Data性能立场?如果所讨论的属性永远不会通过谓词直接查询,那么折中是什么?

回答

10

我还没有看到任何性能问题的中小型数据集。我怀疑这是你在应用程序性能阶段处理的事情。

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

+0

非常感谢Marcus!我希望你能成为回答这个问题的人。来自经过认证的Core Data忍者让我有信心把这个问题抛在身后。 – thevoid 2010-08-04 01:51:05

+6

如果Marcus真的是Core Data忍者,那么我们永远也看不到他......除非他想让我们去思考。忍者是棘手的恶魔。 – TechZen 2010-08-04 11:43:02