您的位置:首页 > 产品设计 > UI/UE

黑马程序员--NSValue的使用

2015-10-11 13:50 363 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

NSNumber是NSValue的子类,NSValue主要用来把指针、CGRect结构体等包装成OC对象,以便存储。

NSValue的简单应用

//创建一个结构体变量,保存点
// p1 是CGPoint类型的结构体变量
CGPoint p1 = CGPointMake(20, 50);
NSRect r1 = NSMakeRect(0, 0, 200, 100);
//创建数组
NSMutableArray *arr = [NSMutableArray array];

// p1--->obj
//valueWithPoint 把结构体转变成NSValue对象
NSValue *pointVal = [NSValue valueWithPoint:p1];
//把对象存放在数组中
[arr addObject:pointVal];
[arr addObject:[NSValue valueWithRect:r1]];

NSLog(@"%@",arr);

//取出 r1 的值
//rectValue 从 NSValue 对象中,取得NSRect类型的值
NSValue *r1Val = arr[1];
NSRect r2 = [r1Val rectValue];
NSLog(@"%@",NSStringFromRect(r2));
}

使用NSValue把自定义结构体包装成OC对象的例子

typedef struct{
int year;
int month;
int day;
}MyDate; //MyDate是一个别名

int main(int argc, const char * argv[]) {
@autoreleasepool {
test();
//保存 一个 年月日
MyDate md = {2015,10,9};
//@encode(MyDate) 作用,把MyDate类型生成一个常量字符串描述
NSValue *val = [NSValue valueWithBytes:&md objCType:@encode(MyDate)];
//定义一个数组,把val存到数组中
NSMutableArray *arr = [NSMutableArray arrayWithObject:val];

//从数组中取出来NSValue对象
//从对象中取出结构体变量的值
//传入一个结构体变量的地址
MyDate tmd;
//getValue获取结构体的值,保存到结构体变量tmd
[val getValue:&tmd];

NSLog(@"%d-%d-%d",tmd.year,tmd.month,tmd.day);
}
return 0;
}


运行结果为:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: