如何使用NSValue 类型包含C结构体
以下文字转载自:http://idev.name/2010/12/nsvalue/ 向原作者表示感谢和敬意。
NSValue的作用是将一个原始类型或结构体(struct)映射为一个对象(object)。
typedef struct {
unsigned char palmCount;
int isFleshy;
float height; // in inches
} Chockitude;
如果要打包这个数据到对象里面,使用下面的代码:
Chockitude ch;
ch.palmCount = 2;
ch.isFleshy = true;
ch.height = 79.25;
NSValue *value = [NSValue valueWithBytes:&ch objCType:@encode(Chockitude)];
检索这个对象的内容,使用下面的操作:
Chockitude theChockitude;
[value getValue:&theChockitude];
NSLog(@"palmCount = %d, isFleshy = %s, height = %f", theChockitude.palmCount, (theChockitude.isFleshy ? "YES OF COURSE" : "no"), theChockitude.height);
// this is displayed in the console log:
// palmCount = 2, isFleshy = YES OF COURSE, height = 79.250000
值的注意的是,在NSValue里面的结构体必须是定长的,不能有指针之类的东西。最好是基本数据类型。