iOS中NSValue使用

iOS中NSValue使用

Posted by HuberyYang on January 14, 2017

NSValue对象是用来存储一个C或者Objective-C数据的简单容器。它可以保存任意类型的数据,如int,float,char,pointers,structures, objectids。

1.初始化NSValue 并存入相应的值,然后再取出

int a = 10;  
          
/* 
第一个参数:需要转化的数据的地址 
第二个参数:要转化的数据的类型的字符串 @encode() 
*/  
NSValue *value1 = [[NSValue alloc] initWithBytes:&a objCType:@encode(int)];  
NSLog(@"%@", value1);  
          
//取出存放的值   
int a1;    
//参数表示转化后的变量的地址  
[value1 getValue:&a1];  
NSLog(@"a1 = %d", a1); 

2.存取结构体

typedef struct{  
    int x;  
    int y;  
}MyPoint; 

//定义结构体的变量  
MyPoint p = {1, 2};  
//把结构体转换为NSValue对象  
NSValue *v2 = [[NSValue alloc] initWithBytes:&p objCType:@encode(MyPoint)];  
NSLog(@"%@", v2);  
              
MyPoint p1;  
[v2 getValue:&p1];  
NSLog(@"%d %d", p1.x, p1.y);  

3.NSRange的存取

NSRange range = {1, 4};  
NSValue *v3 = [NSValue valueWithRange:range];  
NSLog(@"%@", v3);  
          
NSRange range1;  
[v3 getValue:&range1];  
NSLog(@"%ld %ld", range1.location, range1.length);

// 判断NSValue对象里面存储的数据类型是不是int型  
int ret = strcmp([value1 objCType], @encode(int));  
if (ret == 0) {  
    NSLog(@"YES");  
} else{  
    NSLog(@"No");  
}