美文网首页iOS 深度好文
NSValue的介绍和使用 - OC

NSValue的介绍和使用 - OC

作者: 以太死多 | 来源:发表于2015-09-05 12:56 被阅读353次
    什么是NSValue?
    • NSNumber是NSValue的子类, 但NSNumber只能包装数字类型
    • NSValue可以包装任意值
    • 因此, 可以用NSValue将结构体包装后, 加入NSArray\NSDictionary中
    NSValue基本使用
    //创建一个结构体变量,保存点
    // p1 是 CGPoint 类型的结构体变量
    CGPoint p1 = CGPointMake(20, 50);
    NSRect r1 = NSMakeRect(0, 0, 200, 100);
    //创建数组
    NSMutableArray *arr = [NSMutableArray array];
    //p1 ---> obj
    //valueWithPoint    把结构体转换为NSValue对象
    NSValue *pointVal = [NSValue valueWithPoint:p1];
    //把对象存放到数组中
    [arr addObject:pointVal];
    [arr addObject:[NSValue valueWithRect:r1]];
    
    NSLog(@"arr = %@",arr);
    
    //取出r1的值
    // rectValue 从NSValue对象中,取得NSRect类型的值
    NSValue *r1Val = [arr lastObject];
    NSRect r2 = [r1Val rectValue];
    
    NSLog(@"%@",NSStringFromRect(r2));
    
    保存一个年月日的结构体
    typedef struct D{
        int year;
        int month;
        int day;
    
    } MyDate;   //MyDate是一个别名
    
    int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        // 保存 一个 年月日
        // 2015-5-7
        MyDate md = {2015,5,7};
        // md -----> obj
        //@encode(MyDate) 作用,把MyDate类型生成一个常量字符串描述
        NSValue *val = [NSValue valueWithBytes:&md objCType:@encode(MyDate)];
        //定义一个数组,把val存到数组中
        NSMutableArray *arr = [NSMutableArray arrayWithObject:val];
        
        //从数组中取出来NSValue对象
        //从对象中,取出结构体变量的值
        // 传入一个结构体变量的地址
        MyDate tmd;
        // getValue获取结构值,保存到结构体变量tmd
        [val getValue:&tmd];
        
        NSLog(@"%d,%d,%d",tmd.year,tmd.month,tmd.day);
        
        
    }
    return 0;
    }

    相关文章

      网友评论

        本文标题:NSValue的介绍和使用 - OC

        本文链接:https://www.haomeiwen.com/subject/qazlcttx.html