SAH*_*AHM 4 64-bit types core-data nsnumber ios
在Core Data中,我有许多属性声明为Integer 64,然后通过NSNumber属性访问(默认情况下这是).
如果我通过以下方式存储和访问这些值,这是否重要:
NSNumber *mySetValue = [NSNumber numberWithInt:someIntValue];
[myObject setMyNumberProperty:mySetValue];
int myRetrievedValue = [myObject.myNumberProperty intValue];
Run Code Online (Sandbox Code Playgroud)
或者
NSNumber *mySetValue = [NSNumber numberWithInteger:someIntegerValue];
[myObject setMyNumberProperty:mySetValue];
NSInteger myRetrievedValue = [myObject.myNumberProperty integerValue];
Run Code Online (Sandbox Code Playgroud)
?
有两种情况我想知道答案:1)如果所需的值用于计算(它包含将转换为货币的数量或值)和2)如果该值只是一个类型基本上只会与自身进行比较,不会用于任何计算.是否可以在一种情况下使用numberWithInt和intValue而不是另外两种情况,或者在两种情况下都必须使用numberWithInteger和integerValue?
此外,如果我之前已将所有值存储为[NSNumber numberWithInt:],这是否重要 - 我可以简单地更改现在存储/检索值的方式,或者我是否需要保持一致性以免产生问题当前用户数据?
我对32位和64位iOS应用程序的工作特别感兴趣.
另外 - 如果核心数据值是整数32,整数16,整数64等,它会对你的答案产生影响吗?
你应该随时使用NSInteger.原因是它将与平台无关.在32位架构上,a NSInteger将是int64位a long.
因此,您可以使用int之前的方法 - 它是两者中较小的子集.
出于同样的原因,您存储在Core Data数据库中的内容也可以.将值设置为Integer64的事实可确保long将来也能正确存储数字.
作为货币的用途也可以,但有一些警告.如果你主要对美分感兴趣,而不是美分,你显然可以将美分跟踪为整数.但是,如果您想进行更复杂的计算(可能涉及一些分数,例如某些会计方法或货币转换),并存储这些结果,则需要类似a float或(更好)a的东西double.