一、NSNumber类的由来
例如:在数组中保存数字,由于数组存储的都是对象的地址,是无法保存数字的,需要将数字转成对象,才能在数组中保存。
例如:字典保存一个文件的名称和文件的大小,因为文件的大小是一个数字,所以字典是无法存储的.
这时,就需要一个类,能够将一个数字以对象的形式展现。这个类就是NSNumber。
二、NSNumber类
1.创建类的对象
NSNumber * intNumber = [[NSNumber alloc] initWithInt: 5];
NSNumber * floatNumber = [[NSNumber alloc] initWithFloat: 1.2f];
NSNumber * doubleNumber = [[NSNumber alloc] initWithDouble: 1.3];
NSNumber * charNumber = [[NSNumber alloc] initWithChar: 'A'];
NSLog(@"%@", intNumber);
NSLog(@"%@", floatNumber);
NSLog(@"%@", doubleNumber);
NSLog(@"%@", charNumber);
int float double char是四种不同的基本数据类型,但是却可以通过一个相同的类,调用不同的方法类获得对象。其实,NSNumber不是一个简单的类,它是一个类簇,一个超级类。
类簇的概念:
比如:Dog类可以创建一个狗的对象,Cat类可以创建一个猫的对象, 但是Animal类既不能创建一个狗的对象,也无法创建一个猫的对象。假如这时存在一个类簇(狗、猫、狮子、老虎的一个类簇)SuperAnimal,那么我们是可以通过该类,来创建狗的对象,也能创建猫的对象。
其实在iOS UI中UIButton就是一个类簇。
2.类的一些方法
1⃣️isEqualToNumber,比较是否相等
NSNumber * intNumber2 = [NSNumber numberWithInt: 5];
BOOL ret = [intNumber isEqualToNumber: intNumber2];
if(ret){
NSLog(@"%@", @"相等");
}else{
NSLog(@"%@", @"不相等");
}
//判断5和5.0f,结果是相等的
NSNumber * floatNumber2 = [NSNumber numberWithFloat: 5.0f];
BOOL ret2 = [floatNumber2 isEqualToNumber: intNumber];
if(ret2){
NSLog(@"%@", @"相等");
}else{
NSLog(@"%@", @"不相等");
}
//判断'A' 和65,结果也是相等的.
if([intNumber compare: intNumber2] == NSOrderedAscending){
NSLog(@"<");
}else if([intNumber compare: intNumber2] == NSOrderedSame){
NSLog(@"==");
}else if([intNumber compare: intNumber2] == NSOrderedDescending){
NSLog(@">");
}
3⃣️xxxValue: 还原数字
int i = [intNumber intValue];
float f = [floatNumber floatValue];
double d = [doubleNumber doubleValue];
char c = [charNumber charValue];
NSLog(@"%d", i);
NSLog(@"%f", f);
NSLog(@"%f", d);
NSLog(@"%c", c);
总结:
其实,上面使用NSNumber创建对象,相当于在数字的表面穿上了一件外衣,变成了一个类,其本质还是一个数字,只是表象发生了变化,它是以一个类的对象形式存在的。还原数字本身,相当于脱去外套,得到本质的数字。这个道理相当于Java中装箱和拆箱。
@诗未冷学习博客