OC基础-NSNumber类簇-将简单数据类型保存为对象

一、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,结果也是相等的.


2⃣️compare:  比较大小

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中装箱和拆箱。


@诗未冷学习博客







你可能感兴趣的:(OC基础-NSNumber类簇-将简单数据类型保存为对象)