iOS-NSNumber对象介绍

一.NSNumber类型:


苹果官方文档介绍:https://developer.apple.com/

NSNumber是NSValue的一个子类,它是一个对象来存储数字值包括bool型

1.提供了一系列的方法来存储char a signed or unsigned char, short int, int, long int, long long int, float, or double or as a BOOL

2.它提供了一个compare:方法来决定两个NSNumber对象的排序;


代码介绍

<span style="font-size:18px;">    //初始化创建
    NSNumber *num1 = [[NSNumber alloc]initWithFloat:15.5];
    NSLog(@"num1 = %@",num1);
    
    //将num1转为基本数据类型
    float value = [num1 floatValue];
    NSLog(@"value = %.1f",value);
    
    //将对象转换为NSString类型的对象
    NSString *numStr = [num1 stringValue];
    NSLog(@"numStr = %@",numStr);
    
    //将NSString类型的对象转为浮点型
    float value1 = [numStr floatValue];
    NSLog(@"%.1f", value1);
    
    //判断两个NSNumber类型的对象是否相等
    NSNumber *num2 = [[NSNumber alloc]initWithFloat:15.5];
    //isEqualToNumber: 比较的是对象中存储的数据
    BOOL isEqual = [num1 isEqualToNumber:num2];
    NSLog(@"isEqual = %d",isEqual);
    
    //比较 compare
    NSComparisonResult result = [num1 compare:num2];
    NSLog(@"result = %ld",result);</span>



创建一个NSNumber对象有以下方法:

+ numberWithBool:  
+ numberWithChar:  
+ numberWithDouble:  
+ numberWithFloat:  
+ numberWithInt:  
+ numberWithInteger:  
+ numberWithLong:  
+ numberWithLongLong:  
+ numberWithShort:  
+ numberWithUnsignedChar:  
+ numberWithUnsignedInt:  
+ numberWithUnsignedInteger:  
+ numberWithUnsignedLong:  
+ numberWithUnsignedLongLong:  
+ numberWithUnsignedShort: 
初始化方法:

– initWithBool:  
– initWithChar:  
– initWithDouble:  
– initWithFloat:  
– initWithInt:  
– initWithInteger:  
– initWithLong:  
– initWithLongLong:  
– initWithShort:  
– initWithUnsignedChar:  
– initWithUnsignedInt:  
– initWithUnsignedInteger:  
– initWithUnsignedLong:  
– initWithUnsignedLongLong:  
– initWithUnsignedShort: 

检索

– boolValue  
– charValue  
– decimalValue  
– doubleValue  
– floatValue  
– intValue  
– integerValue  
– longLongValue  
– longValue  
– shortValue  
– unsignedCharValue  
– unsignedIntegerValue  
– unsignedIntValue  
– unsignedLongLongValue  
– unsignedLongValue  
– unsignedShortValue  

NSNumber类型有点类似id类型,对于任何类型的数字对象都能用它来声明,也就是用它来声明数字对象,通过声明,很难判断声明变量是什么数字类型,确定数字对象类型多是在初始化的时候才能确定。

数字对象的创建或者初始化:

格式:

NSNumber 数字对象 = [NSNumber numberWith数字类型:数值];

intNumber = [NSNumber numberWithInt:100];  
longNumber = [NSNumber numberWithLong:0xabcdef];  
floatNumber = [NSNumber numberWithFloat:10.01]; 

二:int、 NSInteger、 NSUInteger、NSNumber之间的区别和联系

int : 当使用int类型定义变量的时候,可以像写C程序一样,用int也可以用NSInteger,推荐使用NSInteger ,因为这样就不用考虑设备是32位还是64位了。

NSUInteger是无符号的,即没有负数,NSInteger是有符号的。

1:当需要使用int类型的变量的时候,可以像写C的程序一样,用int,也可以用NSInteger,但更推荐使用NSInteger,因为这样就不用考虑设备是32位的还是64位的。

2:NSUInteger是无符号的,即没有负数,NSInteger是有符号的。

3:有人说既然都有了NSInteger等这些基础类型了为什么还要有NSNumber?它们的功能当然是不同的。

NSInteger是基础类型,但是NSNumber是一个类。如果想要存储一个数值,直接用NSInteger是不行的,比如在一个Array里面这样用:

    NSMutableArray *array = [[NSMutableArray alloc]init];
    //[array addObject:1];报错
    //这样是会引发编译错误的,因为NSArray里面放的需要是一个类,但‘1’不是。这个时候需要用到NSNumber:
    [array addObject:[NSNumber numberWithInt:1]];
    [array addObject:@2];

    NSLog(@"array = %@",array);


Cocoa提供了NSNumber类来包装(即以对象形式实现)基本数据类型。

例如以下创建方法:

+ (NSNumber*)numberWithChar: (char)value;
+ (NSNumber*)numberWithInt: (int)value;
+ (NSNumber*)numberWithFloat: (float)value;
+ (NSNumber*)numberWithBool: (BOOL) value;

将基本类型数据封装到NSNumber中后,就可以通过下面的实例方法重新获取它:

- (char)charValue;
- (int)intValue;
- (float)floatValue;
- (BOOL)boolValue;
- (NSString*)stringValue;

















你可能感兴趣的:(iOS-NSNumber对象介绍)