5

在 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 等,这对您的答案有影响吗?

4

1 回答 1

8

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

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

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

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

于 2013-11-04T10:41:11.890 回答