Objective-C基础之NSValue包装结构体

很多情况,我们需要将结构体存到数组中,但是结构体不是对象,所以要首先将结构体转换成对象才能保存,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);


你可能感兴趣的:(Objective-C基础之NSValue包装结构体)