NSValue
NSValue是NSNumber的父类,可以存储任何类型的数据,包括复合数据类型(数组,指针,结构体等),甚至是对象。
//用NSValue包装数组
int a[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
NSValue *value = [NSValue value:a withObjCType:@encode(int[9])];
NSLog(@"%s",@encode(int)); //@encode()返回值是char *类型,打印用%s
//取出被包装的数组并赋值给b数组
int b[9];
[value getValue:b];
for (int i=0; i<9; i++) {
printf("%d",b[i]);
}
printf("\n");
NSLog(@"%s",value.objCType);
//类型比较 返回值都是字符串 用strcmp比较
if (strcmp(value.objCType, @encode(int[9])) == 0) {
NSLog(@"是int[9]类型");
}
//NSValue包装字符串
NSValue *val = [NSValue valueWithNonretainedObject:@"我是OC字符串"];
NSString *str = [val nonretainedObjectValue];
NSLog(@"%@",str);
//NSValue包装结构体
typedef struct{
int age;
char name[20];
}Student;
Student stu = {20,"xiowang"};
NSValue *student = [NSValue value:&stu withObjCType:@encode(Student)];