首页 > 代码库 > NSValue

NSValue

NSNumber是NSValue的子类,但NSNumber只能包装数字类型,NSValue可以包装任意值,

也就可以用NSValue包装结构体后加入NSArray、NSDictionary等集合中。

 

一、#pragma mark 将系统自带结构体包装成对象

 

void value() {

    CGPoint point = CGPointMake(10, 10);

    

    //将结构体变量包装成一个对象。

    NSValue *value = http://www.mamicode.com/[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 = http://www.mamicode.com/[NSValue value:&date withObjCType:type];

    

    Date date1;

    

    //取出包装好的结构体

    [value getValue:&date1];

    

    NSLog(@"year = %i, month = %i, day = %i", date1.year, date1.month, date1.day);

    

}

 

NSValue