十五: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 }

 

posted @ 2016-05-04 08:17  hissia  阅读(240)  评论(0编辑  收藏  举报