很多情况,我们需要将结构体存到数组中,但是结构体不是对象,所以要首先将结构体转换成对象才能保存,NSValue就能把结构体包装成为对象:
1. 一般的结构体的包装和解包 :
//1.创建NSValue(包装结构体), NSValue是NSNumber的父类
//注意:结构体不是对象
NSRange rang = {100,6};
//NSRange封包
NSValue *rangValue = [NSValue valueWithRange:rang];
//NSRange解包
rang = [rangValue rangeValue];
//NSPoint封包
NSPoint point= {12, 21};
NSValue *pointValue = [NSValue valueWithPoint:point];
//NSPoint解包
point = [pointValue pointValue];
2. 自定义结构体
的包装和解包 :
//自定义结构体
struct MyPoint {
float x;
float y;
};
//将自定义的结构体包装成NSValue对象
struct MyPoint p = {50,100};
NSValue *pointValue2 = [NSValue value:&p withObjCType:@encode(struct MyPoint)];
//2.解包结构体
struct MyPoint p2;
[pointValue2 getValue:&p2];
NSLog(@"x=%f,y=%f",p2.x,p2.y);