------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1. NSValue类
NSValueN是SNumber的父类,NSValue可以存储任意类型的数据,NSValue主要用来把指针,结构体包装成OC对象,以便存储。
2. 把结构体包装成NSValue对象
<span style="white-space:pre"> </span>//定义一个可变数组
NSMutableArray *arr=[NSMutableArray array];
//定义一个NSPoint结构体
NSPoint p=NSMakePoint(10, 8);
//把NSPoint结构体转换成NSValue对象
NSValue *v1=[NSValue valueWithPoint:p];
[arr addObject:v1];
//定义一个NSSize结构体
NSSize s=NSMakeSize(10, 20);
//把NSSize结构体转换成NSValue对象
NSValue *v2=[NSValue valueWithSize:s];
[arr addObject:v2];
//定义一个NSRect结构体
NSRect r=NSMakeRect(0, 0, 10, 20);
//把NSRect结构体转换成NSValue对象
NSValue *v3=[NSValue valueWithRect:r];
[arr addObject:v3];
把自定义的结构体包装成NSValue对象
#import <Foundation/Foundation.h>
//自定义一个结构体
typedef struct D{
int year;
int month;
int day;
}MyDate;
int main(int argc, const char * argv[]) {
@autoreleasepool {
//定义一个结构体变量
MyDate md={2015,12,06};
//把自定义结构体变量转换成NSValue对象
NSValue *value=[NSValue valueWithBytes:&md objCType:@encode(MyDate)];
//创建一个数组,把value对象保存到数组中
NSMutableArray *arr=[NSMutableArray arrayWithObject:value];
//获取结构体值,保存到自定义变量mydate中
MyDate mydate;
[value getValue:&mydate];
NSLog(@"%d-%d-%d",mydate.year,mydate.month,mydate.day);
}
return 0;
}
3. 从NSValue对象中抽取出包装的结构体
//从NSvalue对象中取出NSPoint的值
NSPoint p1=[arr[0] pointValue];
//从NSvalue对象中取出NSSize的值
NSSize s1=[arr[1] sizeValue];
//从NSvalue对象中取出NSRect的值
NSRect r1=[arr[2] rectValue];