int, float, long 类型都是Objective-C 中的基本数据类型,它们都不是对象,也就是说不能向这些数据类型的数据发送消息。有的时候,需要将这些数值作为对象来使用,比如使用NSArray 对象创建一个数组,他要求存储的数据就必须是对象,因此,不能把任何基本数据类型直接存储到数组中。这个时候就可以使用 NSNumber类来完成,它会依据这些数据的类型来创建对象.
代码清单:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSNumber *myNumber, *floatNumber, *intNumber;
//NSInteger *myInt = 256;//关于NSInteger在后面说明
//使用整形数据
intNumber = [NSNumber numberWithInteger:100];
//myInt = [intNumber integerValue]; //本条语句和下面的一条语句会有警告出现
//NSLog(@"%li\n",myInt); //输出整数100的值
NSLog(@"%li\n",(long)[intNumber integerValue]);
//long类型数据
myNumber = [NSNumber numberWithLong:0xabcdef];//输入值为16进制长整型
NSLog(@"0x%lx\n",[myNumber longValue]);//输出16进制值
//char
myNumber = [NSNumber numberWithChar:'G'];
NSLog(@"%c\n",[myNumber charValue]);
//float
floatNumber = [NSNumber numberWithFloat:100.00];
NSLog(@"%g\n",[floatNumber floatValue]);
//floatValue 作为NSNumber的一个对象方法用来返回一个浮点型数据的值
//下面验证两个NSNumber是否相等
if ([intNumber isEqualToNumber:floatNumber]) {
NSLog(@"intNumber和floatNumber的数学值相等。\n");
}
else
NSLog(@"intNumber和floatNumber的数学值不相等。\n");
//判断NSNumber值的大小
if ([intNumber compare:myNumber] == NSOrderedDescending) {
NSLog(@"前者的值比较小");
}
}
return 0;
}
程序结果:
另外:关于NSInteger::
在文档中是这么写的
也就是说 NSInteger并不是类,而是数据类型,所以执行代码清单中打注释的部分会出现警告。