您的位置:首页 > 产品设计 > UI/UE

Foundation框架-05 NSNumber和NSValue

2015-07-07 22:56 435 查看

Foundation框架-05 NSNumber和NSValue

1.NSNumber类

NSNumber可以将基本数据类型转换为对象类型

将基本数据类型转换为NSNumer对象类型

NSNumber *valueNumber = [NSNumber numberWithInt:(基本数据类型)value];

将对象类型转换为基本数据类型

int value = [intNumber intVlue];

基本数据类型转换对象类型简写

NSNumber *temp = @(number);

NSNumber *temp =@10;

// 注意: 如果传入的是变量那么必须在@后面写上(), 如果传入的常量, 那么@后面的()可以省略

2.NSValue类

NSNumber是NSValue的子类, 但NSNumber只能包装数字类型,NSValue可以包装任意值

利用NSValue包装常见的结构体

CGPoint point = CGPointMake(x,y);

NSValue *value = [NSValue valueWithPoint:point];//将point包装为NSValue对象

-(NSPoint)pointValue;//从对象中取出此前包转的结构体

利用NSValue包装自定义的结构体

typedef struct{
int age;
char *name;
double height;
}Person;
Person p = {30, "lnj", 1.75};
// valueWithBytes: 接收一个指针, 需要传递需要包装的结构体的变量的地址
// objCType: 需要传递需要包装的数据类型
NSValue *pValue = [NSValue valueWithBytes:&p objCType:@encode(Person)];
// 从NSValue中取出自定义的结构体变量
Person res;
[pValue getValue:&res];


3.注意点

由于NSArray\NSDictionary中只能存放OC对象,不能存放int\float\double等基本数据类,如果真想把基本数据(比如int)放进数组或字典中,需要先将基本数据类型包装成OC对象

一般若是包装基本数据类型,使用NSNumber,包装构造类型或自定义构造类型时使用NSValue
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: