在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等,它会对你的答案产生影响吗?
答案 0 :(得分:8)
您应该尽可能使用NSInteger
。原因是它将与平台无关。在32位架构上,NSInteger
将是int
,位于64位long
上。
因此,您可以使用之前的int
- 方法 - 它是两者中较小的子集。
出于同样的原因,您存储在Core Data数据库中的内容也可以。将值设置为Integer64的事实可确保将来还能正确存储long
个数字。
作为货币的用途也可以,但有一些警告。如果你主要对美分感兴趣,而不是美分,你显然可以将美分跟踪为整数。但是,如果您想进行更复杂的计算,可能涉及一小部分美分,例如某些会计方法或货币转换,并存储这些结果,您需要类似float
或(更好)a double
。