码迷,mamicode.com
首页 > 其他好文 > 详细

NSValue

时间:2014-12-29 21:15:55      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

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

    

}

 

NSValue

标签:

原文地址:http://www.cnblogs.com/unity-lan/p/4192368.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!