标签:
NSNumber是NSValue的子类,但NSNumber只能包装数字类型,NSValue可以包装任意值,
也就可以用NSValue包装结构体后加入NSArray、NSDictionary等集合中。
一、#pragma mark 将系统自带结构体包装成对象
void value() {
CGPoint point = CGPointMake(10, 10);
//将结构体变量包装成一个对象。
NSValue *value = [NSValue valueWithPoint:point];
NSMutableArray *array = [NSMutableArray array];
//添加value
[array addObject:value];
//取出当时放进去的value
NSValue *value1 = [array lastObject];
CGPoint point1 = [value1 pointValue];
//比较两个结构体是否相同。
BOOL result = CGPointEqualToPoint(point1, point1);
NSLog(@"%i",result);
}
二、#pragma mark 自定义结构体的包装。
typedef struct{
int year;
int month;
int day;
} Date;
void value2() {
Date date = {2014, 12, 29};
//void *代表任何指针。
//因为要求传指针类型参数,所以要传结构体的地址。
//根据结构体类型生成对应的类型描述字符串。
char *type = @encode(Date);
NSValue *value = [NSValue value:&date withObjCType:type];
Date date1;
//取出包装好的结构体
[value getValue:&date1];
NSLog(@"year = %i, month = %i, day = %i", date1.year, date1.month, date1.day);
}
标签:
原文地址:http://www.cnblogs.com/unity-lan/p/4192368.html