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

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

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

Foundation框架中提供了很多的集合类如:NSArray,NSMutableArray,NSSet,NSMutableSet,NSDictionary,NSMutableDictionary但是这些类只能存放OC对象类型的数据

如果要存放基本数据类型,必须先将基本暑假类型包装成对象类型然后再用集合类进行存储,OC中提供的包装类是NSNumber,NSValue。其中NSNumber继承于NSValue。

NSNumber主要针对于基本数据类型的包装,NSValue主要针对结构体进行包装

将包装成NSNumber或NSValue对象类型后存放在数组中,然后从集合类中取出NSNumber、NSValue对象再转换成为基本数据类型

NSNumber的基本使用

// 1.将int基本类型包装成NSNumber对象类型
NSNumber *ageNum = [NSNumber numberWithInt:]; // 2.将包装后的对象存放到字典集合中
NSDictionary *dic = @{@"name":@"Jack",@"age":ageNum}; // 3.取出NSNumber对象
NSNumber *ageNum2 = dic[@"age"]; // 4.再将age对象转换称为基本数据类型int
int age = [ageNum2 intValue]; NSLog(@"%d",age); // 输出 10
// NSNumber提供了很多将基本数据类型转换称为NSNumber对象类型的方法 简单举例
NSNumber *intNum = [NSNumber numberWithInt:];
NSNumber *doubleNum = [NSNumber numberWithDouble:20.5];
NSNumber *floatNum = [NSNumber numberWithFloat:98.98787];
NSNumber *boolNum = [NSNumber numberWithBool:YES]; // 对应的转换称为基本数据类型的方法
int a = [intNum intValue];
double b = [doubleNum doubleValue];
float c = [floatNum floatValue];
BOOL d = [boolNum boolValue]; // NSString对象也可以转换称为int
NSString *str = @"";
int e = [str intValue]; // 输出 20

可以看出虽然NSNumber提供了很多将基本数据类型转换成为NSNumber对象的方法,但是这样写起来太麻烦,Xcode编译器新特性支持 @[(基本数据类型)]方式,可以直接将基本数据类型转换称为NSNumber对象类型。如下代码:

// 成绩
char score = 'A';
NSArray *student = @[
@{@"name": @"Jim", @"age":@, @"height":@175.5, @"weight":@60.5, @"score":@(score)},
@{@"name": @"John", @"age":@, @"height":@179.8, @"weight":@67.2, @"score":@(score)},
@{@"name": @"Jack", @"age":@, @"height":@180.0, @"weight":@, @"score":@(score)}
];
  // 可以看出将int,double类型在直接转换就是在前面加@,如果是变量就用()将变量括起来

NSValue的基本使用

// 创建点坐标结构体
CGPoint point = CGPointMake(, ); // 将结构体转换成为NSValue对象
NSValue *pointValue = [NSValue valueWithPoint:point]; // 将NSValue对象存放到数组中
NSArray *array = @[pointValue]; // 从数组中取出pointValue对象
NSValue *value = array[]; // 将NSValue对象转换成为结构体
CGPoint point2 = [value pointValue]; // 输出:转换成基本类型结构体point2的值:
// 第一种方式:将结构体先转换为字符串然后打印
NSString *str = NSStringFromPoint(point2);
NSLog(@"%@",str); // 输出 {20,20}
// 第二种方式:依次取出对应的值打印
// NSLog(@"%f %f",point2.x,point2.y); 输出 20.000000 20.000000

NSNumber和NSValue的更多相关文章

  1. NSNumber、NSValue、NSDate、NSObject

    注:OC中数组和字典只能存储OC对象不能存放基本数据类型. NSNumber NSNumber可以用来把一个基本数据类型包装成一个NSNumber类型的对象. NSNumber *number = [ ...

  2. iOS Foundation框架 -3.利用NSNumber和NSValue将非OC对象类型数据存放到集合

    1.Foundation框架中提供了很多的集合类如:NSArray,NSMutableArray,NSSet,NSMutableSet,NSDictionary,NSMutableDictionary ...

  3. 02-Foundation-NSMutableString、NSNumber、NSValue、NSDate、NSArray

    目录: 一.NSMutableString可变字符串 二.NSNumber数字对象 三.NSValue 四.NSDate日期对象 五.NSArray数组对象 回到顶部 一.NSMutableStrin ...

  4. OC NSNumber和NSValue和NSDate和NSData

    一 NSNumber // // main.m // 07-NSNumber // // Created by apple on 13-8-12. // Copyright (c) 2013年 itc ...

  5. NSNumber 与NSValue

    NSNumber与NSValue关系与作用 .由于集合里只能存放对象,不可以存放基本数据类型,所以我们有时候需要讲一些对象比如基本数据类型,结构体等存到NSDictionary NSArray中,我们 ...

  6. Objective-C( Foundation框架 一 NSNumber(NSValue))

    NSNumber: 是OC中处理数字的一个类 NSValue是NSNumber的子类 如何处理: 把int,float,double  包装成一个对象 使用NSNumber的好处: 可以把基本数据类型 ...

  7. Objective - C 值对象 NSNumber和NSValue

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

  8. NSDate,NSNumber,NSValue

    NSDate #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleas ...

  9. NSNumber 和 NSValue 的部分使用

    1.NSNumber 在Objective-c中有int,float,char等基本数据类型,但这些基本数据类型并不是对象,而数组,字典,字符串等容器中存放的都是对象类型,因此我们需要用到NSNumb ...

随机推荐

  1. 编写高质量JS代码的68个有效方法(十三)

    No.61.不要阻塞I/O事件队列 Tips: 异步API使用回调函数来延缓处理代价高昂的操作以避免阻塞主应用程序 JavaScript并发的接收事件,但会使用一个事件队列按序地处理事件处理程序 在应 ...

  2. overflow:hidden的另一层含义

    overflow:hidden这个CSS样式是大家常用到的CSS样式,但是大多数人对这个样式的理解仅仅局限于隐藏溢出,而对于清除浮动这个含义不是 很了解.一提到清除浮动,我们就会想到另外一个CSS样式 ...

  3. Android 学习笔记之WebService实现远程调用+内部原理分析...

    PS:终于可以抽出时间写写博客了,忙着学校的三周破实训外加替考...三周了,没怎么学习...哎... 学习内容: 1.WebService 实现远程方法的调用   什么是WebService...   ...

  4. xss-跨站脚本攻击-后台传给前端的html标签安全显示

    作用 后台拼接的html字符串传到前端,默认是不安全的,需要告诉前端这个字符串是安全的,可以正常显示html标签. 知识点 1.定义 2 3 <script>      获取session ...

  5. HT图形组件设计之道(一)

    HT for Web简称HT提供了涵盖通用组件.2D拓扑图形组件以及3D引擎的一站式解决方案,正如Hightopo官网所表达的我们希望提供:Everything you need to create ...

  6. 一起Polyfill系列:Function.prototype.bind的四个阶段

    昨天边参考es5-shim边自己实现Function.prototype.bind,发现有不少以前忽视了的地方,这里就作为一个小总结吧. 一.Function.prototype.bind的作用 其实 ...

  7. [ORM] Entity Framework(2) CodeFirst进阶

    在上一节中,实现了CodeFirst快速入门.但是很多与数据库的细节还无法自定义.以及使用EF过程中,需要注意的事项. 在本节中,会涉及到以下 EF中的连接字符串 EF的对象状态 延迟加载,为什么需要 ...

  8. Winform开发框架之客户关系管理系统(CRM)的开发总结系列1-界面功能展示

    一直以来,都希望整合一个以客户为中心的平台,有两个方面的考虑:一是实现客户数据.客户关系.客户管理等方面的整合,以便更好利用好客户的相关资源,发挥最大的营销效益:二是整合目前我的开发框架的所有模块和技 ...

  9. Python入门笔记(5):对象

    一.学习目录 1.pyhton对象 2.python类型 3.类型操作符与内建函数 4.类型工厂函数 5.不支持类型 二.思考 1.Python解释执行原理? 2.Python对象机制? 3.Pyth ...

  10. SQL Server数据库ROW_NUMBER()函数使用详解

    SQL Server数据库ROW_NUMBER()函数使用详解 摘自:http://database.51cto.com/art/201108/283399.htm SQL Server数据库ROW_ ...