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

在核心数据中,我有许多属性声明为整数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)如果该值只是一种types基本上只会与自己比较,不会用于任何计算。 在一种情况下使用numberWithInt和intValue而不是两种情况下,还是在两种情况下都必须使用numberWithInteger和integerValue?

另外,如果我以前已经将所有的值存储为[NSNumber numberWithInt:] – 我可以简单地改变我现在存储/检索值的方式,还是我需要保持一致性,以免造成问题当前用户数据?

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

另外 – 如果核心数据值是整数32,整数16,整数64等,它是否有所不同?

你应该尽可能地使用NSInteger 。 原因是它将是平台独立的。 在32位体系结构上, NSInteger将是一个64位的int

因此,你可以使用int方法 – 它是两者中较小的一个。

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

作为货币使用也是可以的,有一些注意事项。 如果你主要对美分有兴趣,而不是分美分,那么你显然可以将美分作为整数跟踪。 然而,如果你想做更复杂的计算,可能涉及到几分之一美分,如一些会计方法或货币转换, 并存储这些结果,你会需要像一个float或(更好)一个double