【问题标题】:Core Data, NSNumber, Integer 32 and Integer 64核心数据、NSNumber、整数 32 和整数 64
【发布时间】:2013-11-14 23:00:34
【问题描述】:

在 Core Data 中,我有许多属性声明为 Integer 64,然后通过 NSNumber 属性访问(这是默认设置)。

如果我通过以下方式存储和访问这些值是否重要:

NSNumber *mySetValue = [NSNumber numberWithInt:someIntValue];
[myObject setMyNumberProperty:mySetValue];

int myRetrievedValue = [myObject.myNumberProperty intValue];

或通过

NSNumber *mySetValue = [NSNumber numberWithInteger:someIntegerValue];
[myObject setMyNumberProperty:mySetValue];

NSInteger myRetrievedValue = [myObject.myNumberProperty integerValue];

?

有两种情况我想知道答案:1)如果需要的值用于计算(它包含将转换为货币的数量或值)和 2)如果值只是一种基本上只会与自身进行比较并且不会用于任何计算的类型。是否可以在一种情况下使用 numberWithInt 和 intValue 而不是另一种情况,两种情况下都可以,还是必须在两种情况下都使用 numberWithInteger 和 integerValue?

另外,如果我之前将所有值存储为 [NSNumber numberWithInt:] 是否重要 - 我现在可以简单地更改存储/检索值的方式,还是需要保持一致性以免创建当前用户数据有问题?

我对这个在 32 位和 64 位 iOS 应用程序中的工作特别感兴趣。

另外 - 如果核心数据值是整数 32、整数 16、整数 64 等,是否会对您的答案产生影响?

【问题讨论】:

    标签: ios core-data types 64-bit nsnumber


    【解决方案1】:

    您应该尽可能使用NSInteger。原因是它将独立于平台。在 32 位架构上,NSInteger 将是 int,在 64 位架构上将是 long

    因此,您之前使用过int-方法是可以的 - 它是两者中较小的子集。

    出于同样的原因,您存储在 Core Data 数据库中的内容也可以。将值设置为 Integer64 的事实确保了 long 数字将来也将正确存储。

    用作货币也可以,但有一些注意事项。如果您主要对美分感兴趣,而不是美分的分数,您显然可以将美分跟踪为整数。但是,如果您想要进行更复杂的计算,例如一些会计方法或货币换算,并存储这些结果,您将需要类似 float 或(更好)的东西double

    【讨论】:

    • 谢谢。当你说“只要你可以”时,我有点困惑——这是否意味着当我存储或访问我的核心数据值并使用 numberWithInteger/integerValue 时我需要返回所有实例——因为我可以这样做——或者这样做可能会产生不必要的成本吗?是否有时间可以使用 numberWithInt/intValue?这个答案是否会根据我的核心数据属性设置为整数 16、整数 32、整数 64 或其他什么而改变?
    • 对不起,不够清晰。不,鉴于我在第二段中所说的,你很好。我以为你一直在使用 Integer64。在大多数情况下,您应该可以使用 Integer32 - Integer16 非常小,如果您将它用于 ID,很可能会在一段时间内失败。
    • 对不起,让我澄清一下。在这一点上,我一直使用 Integer64,但我正在考虑返回并将一些更改为 Integer32,因为 Integer64 可能过大了。但是再一次,对不起,让我试着问一下,因为我仍然很困惑:当我存储或访问我的核心数据值并使用 numberWithInteger/integerValue 时,我是否需要返回所有实例 - 因为我可以这样做 - 或者是这样做可能会产生不必要的成本吗?是否有时间可以使用 numberWithInt/intValue?
    • IMO 这将是不必要的。这就是我写“你没事”的意思。 ;-)
    • 所以除非我需要特定格式的检索值,否则我是否使用一种方法或另一种方法并不重要?这一切都只是可以互换的吗?我可以用 NSNumber numberWithInt 存储并用 intValue 或 integerValue 检索?当我比较数据库对象的 NSNumber 相等性时,我可以互换使用 intValue 或 integerValue 吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    • 2019-03-25
    • 1970-01-01
    相关资源
    最近更新 更多