黑马程序员——Foundation框架——NSValue类介绍和使用

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


1. NSValue类

NSValueN是SNumber的父类,NSValue可以存储任意类型的数据,NSValue主要用来把指针,结构体包装成OC对象,以便存储。


2. 把结构体包装成NSValue对象

<span style="white-space:pre">	</span>//定义一个可变数组
        NSMutableArray *arr=[NSMutableArray array];
        //定义一个NSPoint结构体
        NSPoint p=NSMakePoint(10, 8);
        //把NSPoint结构体转换成NSValue对象
        NSValue *v1=[NSValue valueWithPoint:p];
        [arr addObject:v1];
        
        //定义一个NSSize结构体
        NSSize s=NSMakeSize(10, 20);
        //把NSSize结构体转换成NSValue对象
        NSValue *v2=[NSValue valueWithSize:s];
        [arr addObject:v2];
        
        //定义一个NSRect结构体
        NSRect r=NSMakeRect(0, 0, 10, 20);
        //把NSRect结构体转换成NSValue对象
        NSValue *v3=[NSValue valueWithRect:r];
        [arr addObject:v3];


把自定义的结构体包装成NSValue对象

#import <Foundation/Foundation.h>
//自定义一个结构体
typedef struct D{
    int year;
    int month;
    int day;
}MyDate;

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //定义一个结构体变量
        MyDate md={2015,12,06};
        
        //把自定义结构体变量转换成NSValue对象
        NSValue *value=[NSValue valueWithBytes:&md objCType:@encode(MyDate)];
        //创建一个数组,把value对象保存到数组中
        NSMutableArray *arr=[NSMutableArray arrayWithObject:value];
        
        //获取结构体值,保存到自定义变量mydate中
        MyDate mydate;
        [value getValue:&mydate];
        
        NSLog(@"%d-%d-%d",mydate.year,mydate.month,mydate.day);

    }
    return 0;
}


3. 从NSValue对象中抽取出包装的结构体

        //从NSvalue对象中取出NSPoint的值
        NSPoint p1=[arr[0] pointValue];
        
        //从NSvalue对象中取出NSSize的值
        NSSize s1=[arr[1] sizeValue];
        
        //从NSvalue对象中取出NSRect的值
        NSRect r1=[arr[2] rectValue];



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值