NSValue与数据类型

NSValue可以包装所有的数据类型,而前一篇博客写到的NSNumber也是继承自NSValue,在API中我们可以发现,实际上是用了分类进行了扩充,因为集合中需要的是OC对象,所以我们使用的基本数据类型和结构体都可以使用NSValue进行包装,再丢给集合。

 CGPoint p=CGPointMake(20, 10);

        //@encode(CGPoint)标示类型,转换成C语言字符串

       NSValue *v= [NSValue valueWithBytes:&p objCType:@encode(CGPoint)];

        

        NSArray *aa=@[@"123456",@10.5,v];

        

        

        CGPoint p2;

        //返回的一个指针

        [aa[2] getValue:&p2];

        NSLog(@"p2==%@",NSStringFromPoint(p2));

        

        

        //系统自带的结构体用以下方式

        NSValue *valus =[NSValue valueWithPoint:CGPointMake(20, 10)];

        [NSValue valueWithRect:CGRectMake(20, 20, 122, 300)];

        [valus pointValue];

        

        //自定义结构体包装

        struct Student{

            int age;

        };

        struct Student su={15};

        [NSValue valueWithBytes:&su objCType:@encode(struct Student)];

        

        //typedef的方式更简单

        typedef struct {

            int age;

        }Student2;

        Student2 stu={22};

        [NSValue valueWithBytes:&stu objCType:@encode(Student2)];


总结:

1、系统自带的结构体类型和基本数据类型我们可以用NSValue的类方法以value开头的方法对各类型进行包装

2、自定义的结构体需要我们使用valueWithBytes获取存储结构体的地址和@encode获取结构体的结构。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值