Foundation 之 NSNumber

来源:互联网 发布:linux 获取文件夹大小 编辑:程序博客网 时间:2024/06/01 18:26

NSNumber


引入:

基本数据类型变为对象

     例如使用基本数据类型:NSInteger a = 9;
     但是有时候使用基本数据类型是不方便的,比如说需要将基本类型变量装到数组里,但数组里装的都是对象的地址。或者放入字典中也不可行。
     所以需要将基本数据类型变为对象,让我们能够装入数组或者字典当中,让我们能够给他们发送消息,即调用方法,如排序。

专门用来装基础数据类型的对象类NSNumber

      NSNumber的对象可以是各种各样数字的内容。
      比如:
      NSNumber * intNumber = [[NSNumber alloc] initWithInt:5];  // 整型
      NSNumber * floatNumber = [[NSNumber alloc] initWithFloat:3.14f];  // 浮点型
      NSNumber * doubleNumber = [[NSNumber alloc] initWithDouble:3.14];  // 双精度浮点型
      NSNumber * charNumber = [[NSNumber alloc] initWithChar:'A'];  // 字符型
      等等……
      注意:上面这几个对象是不同的对象。

NSNumber是一个类簇

      有一些类聚合在一起形成了一些类簇,从表面上看来是一个类,实际上,它可以创建各种类的对象。
      可以通过NSNumber调用不同的初始化方法创造出不同的对象。
      一个super类,一个与众不同的类,一个超级的类。

      NSNumber和UIButton都是典型的类簇,虽然使用同一个类名,但是可以创建不同的对象。

      举例:猫狗和动物。


NSNumber比较方法

      NSNumber * intNumber1 = [[NSNumber alloc] initWithInt:5];
      NSNumber * intNumber2 = [[NSNumber alloc] initWithInt:6];
      BOOL ret = [intNumber1 isEqualToNumber:intNumber2];  // 比较是否相等。

      BOOL ret = [intNumber1 isEqualToNumber:charNumber];  

                                                            // 比较是否相等(不同类型的对象也可以作比较)


      除了比较是否相等之外,两个NSNumber对象也可以像普通的基本变量一样去比较它们的大小关系:
        if([intNumber1 compare:intNumber2] == NSOrderedAscending){
                NSLog(@"intNumber1 < intNumber2");
        }else if([intNumber1 compare:intNumber2] == NSOrderedSame) {
                NSLog(@"intNumber1 == intNumber2");
        }else if([intNumber1 compare:intNumber2] == NSOrderedDescending) {
                NSLog(@"intNumber1 > intNumber2");
        }


获得原始的基本类型的数据

      既然把基本的数据存到了对象当中,如果想获得原始的基本类型的数据:
      调用intNumber对象的intValue方法。
      如:
      NSLog(@"%d", [intNumber intValue]);
      NSLog(@"%f", [floatNumber floatValue]);
      NSLog(@"%f", [doubleNumber doubleValue]);
      NSLog(@"%c", [charNumber charValue]);

更简洁的理解和使用方法

      // 自动创建NSNumber对象,只要在数字前加一个@,

                              编译器将会识别出它是何种类型的数字(double,float,character,boolean等)

                NSNumber * number = @123; 
      // 获取对象的值
                int value = [number intValue];

0 0
原创粉丝点击