因为NSArray 和NSDictionary 只能用于存储oc数据对象,不能存储 int ,double ,float型,
那就用NSNumber转一下
也就是把int 等包装成NSNumber
NSNumber就是数字对象,我们可以使用NSNumber对象来创建和初始化不同类型的数字对象。
void number(){
//将int类型数据包装成NSNumber
NSNumber *number=[NSNumbernumberWithInt:10];
NSMutableArray *array=[NSMutableArrayarray];
//添加到数组
[arrayaddObject:number];
//取出来还是NSNumber对象,不支持解包
NSNumber *num1=[array lastObject];
//将数据还原
int num=[num1 intValue];
}
NSValue是用来包装结构体的
//系统自带结构体
void value(){
CGPoint point=CGPointMake(10, 10);
//将结构体包装成一个对象
NSValue *value=[NSValue valueWithPoint:point];
NSMutableArray *array=[NSMutableArray array];
//添加到数组
[array addObject:value];
NSValue *val1=[array lastObject];
//将数据还原
CGPoint point2=[val1 pointValue];
//系统自带结构体可以直接做对比
BOOL result=CGPointEqualToPoint(point2, point);
NSLog(@"result=%i",result);
}
//自定义结构体
typedef struct{
int day;
int month;
int year;
}Date;
void value2(){
Date date={21,3,2014};
//void * 代表任何指针
//根据结构体类型生成对应的类型描述字符串
char *type =@encode(Date);
NSValue *value=[NSValue value:&date withObjCType:type];
//定义一个新的结构体接收数据
Date date1;
//取出包装好的结构体
[value getValue:&date1];
//不可以用比较,因为没有现成的比较函数
NSLog(@"day:%i-month:%i-year:%i",date1.day,date1.month,date1.year);
}