Object - C 值对象 NSNumber和NSValue

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Object - C 值对象 NSNumber和NSValue相关的知识,希望对你有一定的参考价值。

在进行数据处理的时候,因为对象类型的不同, 并不能进行相应的数据处理,所以必须要进行数据类型的转换,这也就是NSNumber,NSValue这两类值对象出现的原因。

简而言之,NSNumber就是实现基本数据类型与对象类型的互相转换,而NSValue,则是实现结构体对象与对象类型的互相转换。

NSNumber因为是实现基本数据类型与对象类型的互相转换,所以,必须是要有数据类型,而int ,char,BOOL,Float,Long,Integer等等等~都可以进行相应的转换

//1.将基本数据类型转换为NSNumber *类型的对象

    int number = 10;

    NSNumber *num = [NSNumber numberWithInt:number];

 //2.NSNumber *类型的对象还原成基本数据类型

    int result = [num intValue];

其它的类型使用方法也是相同的方法,比如BOOL

    BOOL isYes = YES;

    NSNumber *isY = [NSNumber numberWithBool:isYes];

 

NSValue也是同样的道理

//1.将结构体转换成值对象

    NSRange range = {5,8};

    NSValue *value = [NSValue valueWithRange:range];

/2.将对象转换成原有的结构体

    NSRange newRange = [value rangeValue];

    //结构不能直接打印,用NSStringFromRange结构体转换成字符串打出来

    NSLog(@"%@",NSStringFromRange(newRange));  

 

注意:当然这只是单纯的介绍一样方法的使用,在做项目或者是做一些数据处理,类型转换时还需要注意当时的形式来使用。比如NSNumber可以实现大小的比较,并不是像字符串那样逐字逐的比较。

    NSNumber *number1 = [NSNumber numberWithInt:17];

    NSNumber *number2 = [NSNumber numberWithInt:123];

    NSComparisonResult numberReslu = [number1 compare:number2];

    NSLog(@"numberResult is %ld",numberReslu);//最后比较的结果是 - 1,而不是1,如果是字符串比较的话则是1.

以上是关于Object - C 值对象 NSNumber和NSValue的主要内容,如果未能解决你的问题,请参考以下文章

对NSNumber的理解

NSNumber和NSValue

NSNumber -initWithDouble 和结果值的问题

将 NSNumber 的 NSSet 更改为 int 的 NSSet

Restkit 从 NSNumber 序列化布尔值

如何增加 NSNumber