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 // valueWithSize13 // valueWithRange14 // valueWithPointer15 // valueWithEdgeInsets16 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 }
你可以用爱得到全世界,你也可以用恨失去全世界