zoukankan      html  css  js  c++  java
  • NSValue 值

    前言

    • 将任意数据类型包装成 OC 对象

    1、比较两个 NSValue 类型数据的大小

    NSValue *value1 = [NSValue valueWithPoint:NSMakePoint(10, 32)];
    NSValue *value2 = [NSValue valueWithPoint:NSMakePoint(10, 32)];
    
    // isEqualToValue
    BOOL bl = [value1 isEqualToValue:value2];
    
    if (bl) {
    	NSLog(@"value1 == value2");
    } else {
    	NSLog(@"value1 != value2");
    }
    

    2、NSValue 与 OC 数据类型的相互转换

    // 将 OC 数据类型转换成 NSValue
    NSValue *value1 = [NSValue valueWithPoint:NSMakePoint(10, 32)];
    
    // 将 NSValue 转换成 OC 数据类型
    NSPoint point = [value1 pointValue];
    NSLog(@"x: %.0f, y: %.0f", point.x, point.y);
    

    3、NSValue 与 自定义数据类型 的相互转换

    // 将 自定义数据类型 转换成 NSValue
    
    // 自定义结构体
    typedef struct { int year; int month; int day; } MyDate;
    
    MyDate date = {2016, 1, 11};
    
    // 取要转换的数据的地址
    void *valueAdd = &date;
    
    // 将自定义数据类型装换成 C 语言字符串
    char *objCType = @encode(MyDate);
    
    // 对象方法,将自定义数据类型转换成 NSValue
    NSValue *value2 = [[NSValue alloc] initWithBytes:valueAdd objCType:objCType];
    
    // 类方法,将自定义数据类型转换成 NSValue
    NSValue *value3 = [NSValue valueWithBytes:&date objCType:@encode(MyDate)];
    
    // 将 NSValue 转换成 自定义数据类型
    
    MyDate date1;
    MyDate date2;
    
    // 从 NSValue 中取出的值放到 &date1 中
    [value2 getValue:&date1];
    
    // 从 NSValue 中取出的值放到 &date2 中
    [value3 getValue:&date2];
    
    NSLog(@"%i, %i, %i", date1.year, date1.month, date1.day);
    NSLog(@"%i, %i, %i", date2.year, date2.month, date2.day);
    
    // 从 NSValue 中取出自定义的数据类型
    const char *type = [value2 objCType];
    
    NSLog(@"%@", [NSString stringWithUTF8String:type]);
    
  • 相关阅读:
    NOIP201310华容道
    NOIP201110观光公交
    markdown
    【NOIP2016】愤怒的小鸟
    【NOIP2016】组合数问题
    [TJOI2019]唱,跳,rap,篮球(生成函数,组合数学,NTT)
    CF1217E Sum Queries? (线段树)
    CF1178F Short/Long Colorful Strip(DP)
    ZROI 暑期高端峰会2019 总结
    [HNOI2012]集合选数(构造,状态压缩,DP)
  • 原文地址:https://www.cnblogs.com/CH520/p/9448222.html
Copyright © 2011-2022 走看看