NSValue 值

NSValue : NSObject

原始创建

    int len = 2;
    Byte *bytes = malloc(sizeof(Byte) * len);
    bytes[0] = 0x00;
    bytes[1] = 0x0f;

    NSValue *value = [[NSValue alloc] initWithBytes:bytes objCType:@encode(char *)];
    NSValue *value2 = [NSValue valueWithBytes:bytes objCType:@encode(int)];

拓展创建 NSValueExtensionMethods

搞出来的 value 都是内容地址的高低位倒置?什么用?

弱引用

    NSString *str = @"123";
    NSValue *value1 = [NSValue valueWithNonretainedObject:str];// 地址高低位反了?
    id v1 = value1.nonretainedObjectValue;

指针

    typedef struct{
        int a ;
        float b ;
    } DataItem ;
    
    DataItem *data = (DataItem*)malloc(sizeof(DataItem)) ;
    data->a = 1 ;
    data->b = 2 ;
    NSValue *value2 = [NSValue valueWithPointer:data] ;
    void *v2 = value2.pointerValue; 

其他

    BOOL eq = [value1 isEqualToValue:value2];
    const char *type = value1.objCType;

拓展 NSValueRangeExtensions

    // 范围 <-> value
    NSValue *value = [NSValue valueWithRange:NSMakeRange(2, 3)];
    NSRange range4 = value.rangeValue;

iOS 11

    [value1 getValue:v2 size:2];