NSNumber是NSValue的子类,NSValue主要用来把指针,CGRect结构体包装成OC对象,以便存储.
一个NSValue对象是用来存储一个c或者Objective-c数据的简单容器.他可以保存任意类型的数据,比如int char ,float,pointers,structures ,和object ,ids,NSValue类的目标是允许以上数据类型的数据结构能够被添加到集合里,例如那些需要那些元素是对象的数据结构,如NSArray或者NSSet的实例.需要注意的是NSValue的对象是不可以枚举的.
#import <Foundation/Foundation.h>
void test (){
//创建一个结构体变量保存一个点
//p1是CGPoint类型的结构体变量
CGPoint p1 = CGPointMake(20, 50);
NSRect r1 = NSMakeRect(0, 0, 100, 200);
//创建数组
NSMutableArray *arr = [NSMutableArray array];
//把结构体变量p1装换成一个对象
NSValue* pointVal = [NSValue valueWithPoint:p1];
//把装换完成的对象加入到数组arr中
[arr addObject:pointVal];
//把结构体r1转换成一个对象
NSValue *rectVal = [NSValue valueWithRect:r1];
[arr addObject:rectVal];
NSLog(@"arr = %@",arr);
//在数组中取出r1的值
NSValue *r1Val = [arr lastObject];
NSRect r2 = [r1Val rectValue];
NSLog(@"%@",NSStringFromRect(r2));
}
typedef struct D{
int year;
int month;
int day;
}MyDate;//MaDate是D这个结构体的别名
int main(int argc, const char * argv[]) {
@autoreleasepool {
//保存一个年月日
//2015-5-7
MyDate md = {2015,5,7};
//结构体类型的变量md转换成对象
//@encode(MyDate),作用,啊MyDate类型生成一个常量字符串描述
NSValue *val = [NSValue valueWithBytes:&md objCType:@encode(MyDate)];
//定义一个数组,把val存到数组中
NSMutableArray *arr = [NSMutableArray arrayWithObjects:val, nil];
//从数组中取出类NSValue对象
MyDate tmd;
//获取结构体值,保存到结构体变量tmd
[val getValue:&tmd];
//从对象中取出结构体变量的值
NSLog(@"%d,%d,%d",tmd.year,tmd.month,tmd.day);
}
return 0;
} |
|