十五:NSValue
NSValue对象是用来存储一个C或者Objective-C数据的简单容器。它可以保存任意类型的数据,比如int,float,char,当然也可以是指pointers, structures, and object ids(NSNumber只能保存基本数据类型,不能保存结构体)。NSValue类的目标就是允许以上数据类型的数据结构能够被添加到集合里,例如那些需要其元素是对象的数据结构,如NSArray或者NSDictionary的实例。需要注意的是NSValue对象一直是不可枚举的。
下面主要介NSValue保存结构体类型,代码如下:
1 #import <Foundation/Foundation.h> 2 3 int main(int argc, const char * argv[]) { 4 @autoreleasepool { 5 //常用结构体类型的转化 6 CGPoint point = {35,67}; 7 NSValue *pointV = [NSValue valueWithPoint:point]; 8 CGRect rect = {34,2,34,78}; 9 NSValue *rectV = [NSValue valueWithRect:rect]; 10 NSLog(@"%@ %@",pointV,rectV); 11 //还有其他结构体类型 12 // valueWithSize 13 // valueWithRange 14 // valueWithPointer 15 // valueWithEdgeInsets 16 17 //自定义结构体的转化 18 typedef struct { 19 int age; 20 char *name; 21 double weight; 22 }Person; 23 Person p = {32,"James",230.0}; //此处p前面不能加* 24 //转化为对象类型 25 //valueWithBytes:接收一个指针,即需要包装的结构体变量的指针 26 //objCType:需要包装的数据类型,@encode开头 27 NSValue *pV = [NSValue valueWithBytes:&p objCType:@encode(Person)]; 28 //打印出来的是二进制,所以需要取出pV中的数据打印 29 NSLog(@"%@",pV); 30 //从Value取出自定义机构体变量 31 Person contentPV; 32 [pV getValue:&contentPV]; 33 NSLog(@"%d %s %f",contentPV.age,contentPV.name,contentPV.weight); 34 } 35 return 0; 36 }