一、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);
类簇的概念:
比如: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(@">"); }
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中装箱和拆箱。
@诗未冷学习博客