// ==============将任意数据类型包装成NSValue======================
// 1.NSString
NSString *name = @"Robin";
// 包装参数1: 变量的地址
// 包装参数2: 变量的数据类型,需要时用@edcode()来传入
NSValue *v = [NSValue valueWithBytes:&name objCType:@encode(NSString)];
// 将NSValue放到数组中
NSArray *array = @[v];
// 从数组中获取NSValue
NSValue *getV = array[0];
// 转换
NSString *n ;
[getV getValue:&n];
// 显示
NSLog(@"%@",n);
// 2.自定义结构体
Date date = {2014,12,23};
// 封装
NSValue *ns = [NSValue valueWithBytes:&date objCType:@encode(Date)];
NSArray *array1 = @[ns];
NSValue *na = array1[0];
Date d;
[na getValue:&d];
NSLog(@"%d-->%d-->%d",d.year,d.month,d.day);
// ==============将常见结构体包装成NSValue======================
// NSRange
NSRange range = NSMakeRange(2, 3);
// 包装
NSValue *ns1 = [NSValue valueWithRange:range];
// 把NSValue放到NSArray中.
NSArray *array0 = @[ns1];
// 从NSArray中获取NSValue
NSValue *ns2 = array0[0];
// 从NSValue中获取原来的结构体
NSRange range1 = ns2.rangeValue;
//显示
NSLog(@"%ld,%ld",range1.location,range1.length);