------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));
}
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;
}