NSValue

如何将非OC对象封装成OC对象,塞给数组等

复制代码
 1 //  2 //  main.m  3 //  NSValue  4 //  5 //  Created by dingxiaowei on 13-5-17.  6 //  Copyright (c) 2013年 dingxiaowei. All rights reserved.  7 //  8   9 #import <Foundation/Foundation.h> 10  11 //创建NSValue 12 void value(){ 13     //创建一个point结构体,这个不是OC对象 14     CGPoint point=CGPointMake(10, 10); 15     //将结构体变量包装成一个对象 16     NSValue *value=[NSValue valueWithPoint:point]; 17     //创建一个数组 18     NSMutableArray *array=[NSMutableArray array]; 19     //将包装好的value放入数组中 20     [array addObject:value];  //添加这个对象的时候,做一次retain操作 21  22     //取出这个对象 23     value=[array lastObject]; 24     //将NSValue对象转化成CGPoint结构体 25     CGPoint point2=[value pointValue]; 26     //比较验证(比较取出来的对象跟之前的对象是否相同) 27     BOOL result = CGPointEqualToPoint(point2, point); 28     if(result==1){ 29         NSLog(@"point=point2"); 30     } 31     else{ 32         NSLog(@"point!=point2"); 33     } 34     //直接打印输出结构体 35     NSString *str=NSStringFromPoint(point2); 36     NSLog(@"取出来的point是:%@",str); 37 } 38  39 //宏定义 40 typedef struct { 41     int year; 42     int month; 43     int day; 44 } Date; 45 //将自定义的结构体塞到数组中 46 void value2(){ 47     Date date={2013,5,17}; 48     //NSLog(@"输入的date是:%i年%i月%i日",date.year,date.month,date.day); 49     //void *代表任何类型的指针,这里第一个参数要传一个void *类型(即这个date的地址) 50     //第二个参数是指这个数据的类型,char *是一个C语言类型的char类型的指针,@encode根据结构体类型,生成对于的类描述字符串 51     char *type=@encode(Date); 52     NSValue *value=[NSValue value:&date withObjCType:type];//这样就能成功的将一个结构体类型包装成一个OC对象 53     //取出包装好的结构体 54     //定义一个结构体变量 55     Date date1; 56     [value getValue:&date1];//将包装的结构体取出来,赋给date1,经过这个方法调用之后,date1里面就有值了 57     //取出类型描述字符串 58     //[value objCType]; //这里就等同于上面的type 59     //直接打印输出结构体 60     //NSString *str=NSStringFromPoint(date1);  //由于不是使用的系统内置的结构体,所以不好使用它封装好的方法 61     NSLog(@"取出来的date1是:%i年%i月%i日",date1.year,date1.month,date1.day); 62 } 63  64 int main(int argc, const char * argv[]) 65 { 66  67     @autoreleasepool { 68          69         //NSNumber只能包装数字,NSValue能包装所有的对象,如果我们向包装一个结构体,那就不能用NSNumber,只能用NSValue 70         //value(); 71         value2(); 72     } 73     return 0; 74 }
复制代码

你可能感兴趣的:(NSValue)