【问题标题】:Core Data Attribute Type Differences核心数据属性类型差异
【发布时间】:2015-02-26 01:01:23
【问题描述】:

我很难理解数据类型的大小差异。

我有一个名为displayOrder 的属性,其类型为Integer 16。我使用此属性来维护用户在 tableView 中添加的 tableViewCells 的显示顺序。我用普通数字“1、2、3”设置了值,它工作正常。

但还有很多其他选项,例如 Integer 32Integer 64DecimalFloatDouble。我做了自己的研究,发现 Float 可以有小数点,而 Double 是 Fl​​oat 大小的两倍(不确定 Decimal 和 Float 之间的区别)。

我的问题是,如果这些差异只是大小,这是否意味着我必须担心 displayOrder 会上升到,例如“1000”,它会超过Integer 16 的位数(是否曾经超过大小?),因此我应该改用Integer 32?而如果我将它设置为Integer 64,并且如果displayOrder只是“1”,我是否需要担心性能下降?

我看过文档NSAttributeType,但不确定这些数字代表什么。

谢谢

【问题讨论】:

    标签: ios objective-c swift core-data


    【解决方案1】:

    我认为@choppin 意味着在速度方面它不会有太大的不同。大小方面确实如此,一个 int16 是 int32 大小的一半,并且当您只需要 int16 时拥有大量 int32 将具有更大的内存占用。这里的数字代表变量在内存中占用的位数。

    如果你只有一对,那就不用担心,但如果你有一个大数据集,那么它就会成为一个问题。

    另外,如果您要存储的数字可能是一个非常大的数字,那么您需要更大的选项,例如 int32 可以存储 4,294,967,296 或如果 Int 已签名(默认情况下是该数字的一半)。如果你超过了有符号整数的最大大小,那么数字会环绕,变为负数或为 0 对于有符号整数。

    由于内存是移动设备上的一个问题,因此您选择哪个选项值得考虑,尽管与几年前相比,它的保证更少。

    【讨论】:

    • 如果 signed int 为负数或 0,或者 unsigned int 超过该数字,会发生什么情况?属性是否变为空?
    • 他们环绕。 unsigned int 是正数,它会变为 0 或最大数,具体取决于它是什么值以及它的移动方式、加法或减法。有符号整数将从最大正数变为最大负数,反之亦然,具体取决于其值以及是否加减。如果您将其视为循环,则很容易理解。最大值和最小值相互连接。最大值加 1,得到最小值。您可以在此循环中选择任何一种方式。
    • 我可能应该更多地研究有符号整数和无符号整数。对不起,我还没有完全理解这一点。如果我理解正确,如果我使用 Int16 它将使用更少的内存。但是如果数字环绕,是否意味着当存储的数据大于 Int16 时不会引起任何问题?那么使用更大的类型 Int32 和 Int64 有什么意义呢?感谢您迄今为止的帮助。
    • 这绝对是任何认真编程的人都应该知道的主题,我强烈建议您理解这一点,因为它可以帮助您在处理大量数字时得到奇怪的结果。使用较大数字的较小类型的问题是您会得到逻辑错误而不是崩溃。
    • 这更有意义,“你会得到逻辑错误而不是崩溃”。我可能不应该担心这些,因为我的只是一个展示订单。我现在明白一点了。谢谢。
    【解决方案2】:

    你使用哪一个不应该对性能产生太大影响,但我会坚持使用整数 32。这会给你 2 的 32 次方值(对于显示顺序来说应该绰绰有余)

    【讨论】:

    • 感谢您的回复。不过,我不明白为什么 Apple 添加了在不同尺寸之间进行选择的选项,如果它没有区别的话。我倾向于在这些小事上花费太多时间:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多