Foundation 之 NSValue

10 篇文章 0 订阅
10 篇文章 0 订阅

NSValue


      NSValue是NSNumber的父类,可以将指针、结构体等复杂的数据类型存储为对象。
      NSValue同NSNumber一样,也是一个类簇,它可以生成各种数据类型的对象。

把结构体数据存储为对象

        struct sct{
                int a;
                int b;
        }sct1 = {4, 5};

        NSValue * value = [[NSValue alloc] initWithBytes:&sct1 objCType:@encode(struct sct)];
                // 第一个参数&sct1是要存储数据的地址,
                // 第二个参数@encode(struct sct)是将要存储的数据类型转换成一个字符串标识
                        // 如 NSLog(@"%s", @encode(int));  能打印出int型转换成的字符串标识

判断NSValue是何种数据类型的对象

      用NSValue对象的objCType方法查看它的数据类型字符串标识。如:
        if(strcmp(value.objCType, @encode(struct sct)) == 0){
                NSLog(@"It is struct sct.");
        }

从结构体对象中把数据取出来

        struct sct newSct1;
        [value getValue: &newSct1]; // 参数传入的是要存储取出来的数据的地址
                // 从value对象中取出结构体数据到newSct1
        NSLog(@"%d %d", newSct1.a, newSct1.b);

把指针存储为对象

        char * p = 0x1f;
        NSValue * value = [[NSValue alloc] initWithBytes:&p objCType:@encode(char *)];

从指针对象中把指针取出来

        char * newP;
        [value getValue: &newP];  // 传入地址
        NSLog(@"%p", newP);

根据存储的数据的不同,生成的对象是不同类的对象

        CGPoint point;
        CGSize size;
        CGRect rect;
        NSValue * pointValue = [NSValue valueWithPoint:point];
        NSValue * sizeValue = [NSValue valueWithSize:size];
        NSValue * rectValue = [NSValue valueWithRect:rect];
        NSValue * rangeValue = [NSValue valueWithRange:NSMakeRange(3,4)];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值