我应该在核心数据中使用字符串而不是整数作为属性类型吗?

Posted

技术标签:

【中文标题】我应该在核心数据中使用字符串而不是整数作为属性类型吗?【英文标题】:Should I just use string as attribute type instead of integer in core-data? 【发布时间】:2014-04-03 16:13:36 【问题描述】:

我有一个允许用户输入数字的文本文件。这就是我所做的:

[_textfield setText:[NSString stringWithFormat:@"%d", [_textfield.text intValue]]];

基本上,我将文本字段中的文本转换为整数,然后再转换回字符串。这将确保文本仅为数字。

现在我需要将 _textfield 中的文本存储到核心数据中。我想知道应该使用字符串作为属性类型还是整数。

我知道整数是一个更明智的选择。但是对于这种情况,每次加载视图时,我都需要获取这些数据并将其设置为 _textfield。如果我使用整数作为属性类型,我每次都必须转换为字符串。我知道我需要做的只是:

_textfield.text = [numberFromCoreData stringValue];

我不需要对那个数字进行比较、排序或进行任何算术计算,所以我应该只使用字符串作为属性类型吗?

【问题讨论】:

【参考方案1】:

整数搜索比字符串搜索快得多。这是在持久层中使用数字的最令人信服的理由。数字的排序方式也不同于字符串。

出于性能原因,当我知道值始终是整数时,我永远不会使用字符串。控制输入​​,强制它只接受数字并保持数据完整性。

【讨论】:

【参考方案2】:

这取决于您需要如何使用该字段。几乎在所有情况下,整数数据都应该存储为整数类型,但并非总是如此。如果您曾经在其数值以某种方式计数的情况下使用该字段,那么您肯定需要一个整数类型。这包括排序(因为使用数字字段要快得多)、比较数值或任何类型的数学运算。

但也有例外。例如,在某些情况下,最初看起来本质上是数字的字段结果并非如此。就像通常是整数的“大小”字段一样。但仔细观察后发现,某些尺寸被指定为“8 - 10”、“12 - 14”等。这发生在我几年前开发的一个应用程序中。在那种情况下,我最终为数据使用了两个字段——一个可用于排序的数字“sortSize”,以及一个包含完整字符串的字符串“displaySize”。

【讨论】:

【参考方案3】:

这可能不是您想要的,但您为什么不在文本字段中使用键盘类型“数字键盘”呢? 这样,您就可以确定您的文本字段中只有数字。

【讨论】:

【参考方案4】:

老实说,我想不出一个令人信服的理由。一般来说,字符串比整数占用更多的存储空间,但在现代计算世界中,这并不是什么大问题。如果你不是真的太用力地推动你的处理器,我会选择方便的。

从最基本的思考方式来看,整数是一个数字,但对于字符串,计算机需要知道字符串何时结束、何时开始以及其中的内容,因此它会更大一些。

【讨论】:

以上是关于我应该在核心数据中使用字符串而不是整数作为属性类型吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用核心数据整数 64 属性?

EXC_BAD_ACCESS 设置核心数据实体属性

使用 lambda 而不是字符串属性名称选择模型属性

对核心数据请求进行升序排序

SQL Server 2005 会因为我使用 nvarchar(50) 而不是整数作为主键而惩罚我吗?

如何从 MySQL 获取整数作为 PHP 中的整数?