核心数据,NSNumber,整数32和整数64

时间:2013-11-04 10:30:32

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

在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等,它会对你的答案产生影响吗?

1 个答案:

答案 0 :(得分:8)

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

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

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

作为货币的用途也可以,但有一些警告。如果你主要对美分感兴趣,而不是美分,你显然可以将美分跟踪为整数。但是,如果您想进行更复杂的计算,可能涉及一小部分美分,例如某些会计方法或货币转换,并存储这些结果,您需要类似float或(更好)a double