上QQ阅读APP看书,第一时间看更新
4.5 NSNumber类
在编程的过程中,一些基本数据类型的变量是必不可少的,但是在Objective-C编程语言当中,Objective-C的消息机制并不能向这些基本数据类型发送消息,而且Objective-C的集合(如:数组)当中是不能存放基本数据类型的,所以就需要将基本数据类型转化成对象来使用。Objective-C中提供了NSNumber类来将基本数据类型“包装”成数字对象,这样就可以将基本数据类型当做对象来处理了。
1.NSNumber对象创建
当需要把基本数据类型转换成NSNumber类型的对象时,转换方式通常有以下两种。
- 使用@符号进行快速封装。
- 调用NSNumber类提供的方法。通过调用NSNumber类中提供的方法,NSNumber类型的对象不仅仅可以转换int、float、double这些常规的基本数字类型,还可以包装char、BOOL。
下方的示例代码中演示了常用的基本数据类型转换成NSNumber对象的方法,当需要打印NSNumber对象时,在NSLog()中需要使用%@。
运行结果如图4-19所示。
图4-19 运行结果
2.NSNumber对象与基本数据类型之间的转换
基本数据类型可以转换为NSNumber类的对象,NSNumber类的对象也可以转换成基本数据类型,在NSNumber类中也提供了对应的属性与方法。
下方的示例代码演示了如何把NSNumber对象转换成其他基本数据类型。
运行结果如图4-20所示。
图4-20 运行结果
3.int、NSInteger与NSNumber的对比
- 当使用int类型定义变量时,可以像写C程序一样去使用。当程序员不知道程序运行在哪种处理器架构时,最好使用NSInteger,因为int在32位系统中也许只是int类型,而在64位系统中int可能变成long型。除非不得不使用int/long型,否则推荐使用NSInteger。
- NSInteger/NSUInteger是一种动态定义的类型,在不同的设备,不同的架构,有可能是int类型,也有可能是long类型。NSUInteger是无符号的,即没有负数,而NSInteger是有符号的。
- NSInteger是基础类型。NSNumber是一个类。如果需要在数组中存储一个数值,直接使用NSInteger是不行的,因为Objective-C的集合当中存储的数据必须是对象。