2.5 Integer 16、Integer 32与Integer 64
对于属性来说,这三种数据类型是比较相似的,它们都表示没有小数点的整数,唯一区别就在于能够表示多大或多小的数。由于Core Data使用“带符号的整数”(signed integer),所以取值范围从某个负数开始,而不是从0开始:
1.Integer 16的取值范围是–32 768至32 767
2.Integer 32的取值范围是–2 147 483 648至2 147 483 647
3.Integer 64的取值范围是–9 223 372 036 854 775 808至9 223 372 036 854 775 807
数字的值越大,所占的内存就越多。在这三种整数类型之间选择时,你需要思考当前属性的最小取值和最大取值。如果不能确定的话,那么通常可以选用Integer 32。要是程序出错了,那就说明需要选用一种取值范围更广的数据类型,此时可以把属性的类型提升到Integer 64。我们需要升级托管对象模型才能完成这种修改操作,第3章将会讨论此话题。
Integer使用以2为底的数制,更通俗的说法是二进制。计算机执行整数运算的速度要比执行浮点数运算更快,因为它无需考虑运算所产生的余数。比方说,如果计算10除以3的话,那么只要算出结果是3就好了,余下的那个1可以丢弃。这种运算有个专门的术语,叫做低精度(low precision)运算。如果要用整数来表示货币,那么笔者强烈建议你用“1”表示“1分钱”。这样的话,在执行财务计算的时候就不会出现舍入误差了。
提示 标准整数的最小取值与最大取值可以从stdint.h文件里看到:在Xcode中打开任意类文件,输入INT32_MAX,然后用鼠标右击这几个字符,选择Jump to Definition,你会看到stdint.h文件里定义了各种整数的最小取值与最大取值。你也会注意到:无符号整数的最大取值要比带符号整数的大,这是因为它们的值不会低于0。Core Data只使用带符号的整数,这样做的优点是既能表示负值,又能表示正值,缺点则是最大取值要比无符号整数的小。
根据实体来创建NSManagedObject子类时,如果实体中某个属性的类型为Integer 16、Integer 32或Integer 64,那么在创建好的子类里,相关特性的类型就会是NSNumber。