数值类对象:NSNumber,NSValue,NSNull
2014-06-27 09:50
267 查看
基本,集合,复杂,对象
可用对象封装基本数值,然后将对象放入NSArray或NSDictionary 中。
用对象封装基本数值后,即可给其发送消息。
数值类型包括:NSNumber,NSValue,NSNull类。
oc不支持自动装箱
NSNumber类
创建方法
+ (NSNumber *)numberWithChar:(char)value;
+ (NSNumber *)numberWithInt:(int)value;
+ (NSNumber *)numberWithFloat:(float)value;
+ (NSNumber *)numberWithDouble:(double)value;
+ (NSNumber *)numberWithBool:(BOOL)value;
+ (NSNumber *)numberWithInteger:(NSInteger)valueNS_AVAILABLE(10_5, 2_0);
创建类型后,就可以放入字典或数组中。
解除装箱,获取数据:
- (char)charValue;
- (int)intValue;
- (float)floatValue;
- (double)doubleValue;
- (BOOL)boolValue;
可以任意类型的转换
发送消息:
NSNumber 继承自NSObject;
可使用compare、isEqual等消息。
NSNumber是NSValue的子类。
NSValue可包装任意类型值。
泛型指针
void * 针对简单,复杂数据类型
id 可指向任意oc对象的指针
NSArray和NSDictionary是不支持存储基本数据类型的,所以Cocoa提供了NSNumber类用来包装基本的数据类型,如:int、char、BOOL、float..等各种有符号和无符号的基本数据类型
NSNumber
1、
+ (NSNumber *)numberWithChar:(char)value;
+ (NSNumber *)numberWithInt:(int)value;
+ (NSNumber *)numberWithFloat:(float)value;
+ (NSNumber *)numberWithBOOL:(BOOL)value;
...
...
创建NSNumber对象
NSNumber *number;
number = [NSNumber numberWithInt:123];
2、
- (char)charValue;
- (int)intValue;
- (float)floatValue;
- (BOOL)boolValue;
...
...
提取数值
[number intValue];
创建了NSNumber之后,就可以把它存储到NSArray或者NSDictionary中了:
NSMutableArray *array = [NSMutableArray arrayWithCapacity:10];
[array addObject:number];//存储到数组中
可以用快速枚举遍历数组元素
for(NSNumber *num in array)
{
NSLog(@"%c", [num intValue]);
}
NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithCapacity:10];
[dic setObject:number forKey:@"1"];//存储到字典中
可以用快速枚举遍历字典元素
for(id mdic in dic)
{
NSLog(@"%c", [[dic objectForKey:mdic] intValue]);
}
通常,将一个基本类型的数据包装成对象叫做装箱(boxing),从对象中取出基本数据类型叫做取消装箱(unboxing)
NSValue
实际上NSMunber是NSValue的子类,NSValue可以包装任意一个对象,可以用NSValue将struct存到NSArray和NSDictionary中。
1、+ (NSValue *)valueWithBytes:(const void *)value objCType:(const char *)type;
创建一个NSValue
value:对象地址
objCType:通常是一个用来描述对象类型和大小的字符串,@encode可以接受一个数据类型的名称自动生成一个合适的描述字符串
2、- (void)getValue:(void *)value(出参);
从接受value的对象中
提取数值
提取的数值,存放在这个指针所指向的内存块里。
3、Cocoa提供了常用struct数据类型转换成NSValue的便捷方法:
+ (NSValue *)valueWithPoint:(NSPoint)point;
+ (NSValue *)valueWithSize:(NSSize)size;
+ (NSValue *)valueWithRect:(NSRect)rect;
- (NSPoint)pointValue;
- (NSSize)sizeValue;
- (NSRect)rectValue;
[cpp] view plaincopy
//声明并初始化一个struct
NSRect rtc = NSMakeRect(12, 32, 433, 343);
//创建一个NSValue:
//value:对象地址
//objCType:通常是一个用来描述对象类型和大小的字符串,@encode会自动生成一个合适的描述字符串
NSValue *value = [NSValue valueWithBytes:&rtc objCType:@encode(NSRect)];
//把value添加到数组中
NSMutableArray *array = [NSMutableArray arrayWithCapacity:10];
[array addObject:value];
NSRect rt;
//从数组中取到NSValue,因为只添加了一个,所以小标是0
NSValue *v = [array objectAtIndex:0];
//从value中取得一个NSRect,虽然返回值是void,但其实是它是利用指针返回值的
[v getValue:&rt];
//输出结果
NSLog(@"%f %f %f %f", rt.origin.x, rt.origin.y, rt.size.height, rt.size.width);
//用快速枚举遍历array并输出NSValue中struct属性的值
for(NSValue *v in array)
{
NSRect rt;
[v getValue:&rt];
NSLog(@"%f %f %f %f", rt.origin.x, rt.origin.y, rt.size.height, rt.size.width);
}
/////////////////////便捷的struct转换成NAValue方式////////////////////////
//声明并初始化一个struct
NSRect rtc1 = NSMakeRect(100, 200, 300, 400);
//创建一个NSValue
NSValue *value1 = [NSValue valueWithRect:rtc1];
//把value1添加到数组中
NSMutableArray *array1 = [NSMutableArray arrayWithCapacity:10];
[array1 addObject:value1];
NSRect rt1 = [value1 rectValue];
//输出结果
NSLog(@"%f %f %f %f", rt1.origin.x, rt1.origin.y, rt1.size.height, rt1.size.width);
自定义类型
[cpp] view plaincopy
typedef struct
{
int id;
float height;
unsigned char flag;
} MyTestStruct;
MyTestStruct myTestSturct;
myTestSturct.id = 1;
myTestSturct.height = 23.0;
myTestSturct.flag = 'A';
//封装数据
NSValue *value = [NSValue valueWithBytes:&myTestSturct objCType:@encode(MyTestStruct)];
//取出value中的数据
MyTestStruct theTestStruct;
[value getValue:&theTestStruct];//可对theTestStruct操作取得其中的数据
NSNull
在集合中不能存放nil值,因为在NSArray和NSDictionary中nil有特殊的含义。但是在有些时候,确实需要用到这样的空值,比如在字典中,电话簿中"Jack"关键字下有电话号码、家庭住址、Email等等信息,但是现在只知道他的电话号码,这种不知道其他信息的情况下为了消除一些歧义,有必要将它们设置为空,所以Cocoa提供了NSNull
NSNull只有一个方法:null
[dictionary setObject:[NSNull null], forKey:"Email"];
if(EmailAdress == [NSNull null])
{
//to do something...
}
[cpp] view plaincopy
//声明并初始化一个struct
NSRect rtc = NSMakeRect(12, 32, 433, 343);
//创建一个NSValue:
//value:对象地址
//objCType:通常是一个用来描述对象类型和大小的字符串,@encode会自动生成一个合适的描述字符串
NSValue *value = [NSValue valueWithBytes:&rtc objCType:@encode(NSRect)];
//把value添加到数组中
NSMutableArray *array = [NSMutableArray arrayWithCapacity:10];
[array addObject:value];
NSRect rt;
//从数组中取到NSValue,因为只添加了一个,所以小标是0
NSValue *v = [array objectAtIndex:0];
//从value中取得一个NSRect,虽然返回值是void,但其实是它是利用指针返回值的
[v getValue:&rt];
//输出结果
NSLog(@"%f %f %f %f", rt.origin.x, rt.origin.y, rt.size.height, rt.size.width);
//用快速枚举遍历array并输出NSValue中struct属性的值
for(NSValue *v in array)
{
NSRect rt;
[v getValue:&rt];
NSLog(@"%f %f %f %f", rt.origin.x, rt.origin.y, rt.size.height, rt.size.width);
}
/////////////////////便捷的struct转换成NAValue方式////////////////////////
//声明并初始化一个struct
NSRect rtc1 = NSMakeRect(100, 200, 300, 400);
//创建一个NSValue
NSValue *value1 = [NSValue valueWithRect:rtc1];
//把value1添加到数组中
NSMutableArray *array1 = [NSMutableArray arrayWithCapacity:10];
[array1 addObject:value1];
NSRect rt1 = [value1 rectValue];
//输出结果
NSLog(@"%f %f %f %f", rt1.origin.x, rt1.origin.y, rt1.size.height, rt1.size.width); }
[cpp] view plaincopy
//函数声明,定义时,需要出现参数类型
//调用函数时,不出现数据类型 /1
//若出现数据类型,则为强制转换 /2
NSMutableArray *kbArr;
NSMutableDictionary *kbDic;
NSRect stRect = {1,20,200,200};
//NSValue *vlaue = [NSValue valueWithRect:stRect];
//1
NSValue *vlaue = [NSValue valueWithBytes:&stRect objCType:@encode(NSRect)];
//2
NSValue *vlaue1 = [NSValue valueWithBytes:(const void *)&stRect objCType:(const char *)@encode(NSRect)];
[kbArr addObject:vlaue];
[kbDic setObject:vlaue forKey:@"stRect"];
本章总结:
掌握nsnumber类的作用,实用方法。
掌握nsvalue类的作用,实用方法。
掌握nsnull类的作用,实用方法。
可用对象封装基本数值,然后将对象放入NSArray或NSDictionary 中。
用对象封装基本数值后,即可给其发送消息。
数值类型包括:NSNumber,NSValue,NSNull类。
oc不支持自动装箱
NSNumber类
创建方法
+ (NSNumber *)numberWithChar:(char)value;
+ (NSNumber *)numberWithInt:(int)value;
+ (NSNumber *)numberWithFloat:(float)value;
+ (NSNumber *)numberWithDouble:(double)value;
+ (NSNumber *)numberWithBool:(BOOL)value;
+ (NSNumber *)numberWithInteger:(NSInteger)valueNS_AVAILABLE(10_5, 2_0);
创建类型后,就可以放入字典或数组中。
解除装箱,获取数据:
- (char)charValue;
- (int)intValue;
- (float)floatValue;
- (double)doubleValue;
- (BOOL)boolValue;
可以任意类型的转换
发送消息:
NSNumber 继承自NSObject;
可使用compare、isEqual等消息。
NSNumber是NSValue的子类。
NSValue可包装任意类型值。
泛型指针
void * 针对简单,复杂数据类型
id 可指向任意oc对象的指针
NSArray和NSDictionary是不支持存储基本数据类型的,所以Cocoa提供了NSNumber类用来包装基本的数据类型,如:int、char、BOOL、float..等各种有符号和无符号的基本数据类型
NSNumber
1、
+ (NSNumber *)numberWithChar:(char)value;
+ (NSNumber *)numberWithInt:(int)value;
+ (NSNumber *)numberWithFloat:(float)value;
+ (NSNumber *)numberWithBOOL:(BOOL)value;
...
...
创建NSNumber对象
NSNumber *number;
number = [NSNumber numberWithInt:123];
2、
- (char)charValue;
- (int)intValue;
- (float)floatValue;
- (BOOL)boolValue;
...
...
提取数值
[number intValue];
创建了NSNumber之后,就可以把它存储到NSArray或者NSDictionary中了:
NSMutableArray *array = [NSMutableArray arrayWithCapacity:10];
[array addObject:number];//存储到数组中
可以用快速枚举遍历数组元素
for(NSNumber *num in array)
{
NSLog(@"%c", [num intValue]);
}
NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithCapacity:10];
[dic setObject:number forKey:@"1"];//存储到字典中
可以用快速枚举遍历字典元素
for(id mdic in dic)
{
NSLog(@"%c", [[dic objectForKey:mdic] intValue]);
}
通常,将一个基本类型的数据包装成对象叫做装箱(boxing),从对象中取出基本数据类型叫做取消装箱(unboxing)
NSValue
实际上NSMunber是NSValue的子类,NSValue可以包装任意一个对象,可以用NSValue将struct存到NSArray和NSDictionary中。
1、+ (NSValue *)valueWithBytes:(const void *)value objCType:(const char *)type;
创建一个NSValue
value:对象地址
objCType:通常是一个用来描述对象类型和大小的字符串,@encode可以接受一个数据类型的名称自动生成一个合适的描述字符串
2、- (void)getValue:(void *)value(出参);
从接受value的对象中
提取数值
提取的数值,存放在这个指针所指向的内存块里。
3、Cocoa提供了常用struct数据类型转换成NSValue的便捷方法:
+ (NSValue *)valueWithPoint:(NSPoint)point;
+ (NSValue *)valueWithSize:(NSSize)size;
+ (NSValue *)valueWithRect:(NSRect)rect;
- (NSPoint)pointValue;
- (NSSize)sizeValue;
- (NSRect)rectValue;
[cpp] view plaincopy
//声明并初始化一个struct
NSRect rtc = NSMakeRect(12, 32, 433, 343);
//创建一个NSValue:
//value:对象地址
//objCType:通常是一个用来描述对象类型和大小的字符串,@encode会自动生成一个合适的描述字符串
NSValue *value = [NSValue valueWithBytes:&rtc objCType:@encode(NSRect)];
//把value添加到数组中
NSMutableArray *array = [NSMutableArray arrayWithCapacity:10];
[array addObject:value];
NSRect rt;
//从数组中取到NSValue,因为只添加了一个,所以小标是0
NSValue *v = [array objectAtIndex:0];
//从value中取得一个NSRect,虽然返回值是void,但其实是它是利用指针返回值的
[v getValue:&rt];
//输出结果
NSLog(@"%f %f %f %f", rt.origin.x, rt.origin.y, rt.size.height, rt.size.width);
//用快速枚举遍历array并输出NSValue中struct属性的值
for(NSValue *v in array)
{
NSRect rt;
[v getValue:&rt];
NSLog(@"%f %f %f %f", rt.origin.x, rt.origin.y, rt.size.height, rt.size.width);
}
/////////////////////便捷的struct转换成NAValue方式////////////////////////
//声明并初始化一个struct
NSRect rtc1 = NSMakeRect(100, 200, 300, 400);
//创建一个NSValue
NSValue *value1 = [NSValue valueWithRect:rtc1];
//把value1添加到数组中
NSMutableArray *array1 = [NSMutableArray arrayWithCapacity:10];
[array1 addObject:value1];
NSRect rt1 = [value1 rectValue];
//输出结果
NSLog(@"%f %f %f %f", rt1.origin.x, rt1.origin.y, rt1.size.height, rt1.size.width);
自定义类型
[cpp] view plaincopy
typedef struct
{
int id;
float height;
unsigned char flag;
} MyTestStruct;
MyTestStruct myTestSturct;
myTestSturct.id = 1;
myTestSturct.height = 23.0;
myTestSturct.flag = 'A';
//封装数据
NSValue *value = [NSValue valueWithBytes:&myTestSturct objCType:@encode(MyTestStruct)];
//取出value中的数据
MyTestStruct theTestStruct;
[value getValue:&theTestStruct];//可对theTestStruct操作取得其中的数据
NSNull
在集合中不能存放nil值,因为在NSArray和NSDictionary中nil有特殊的含义。但是在有些时候,确实需要用到这样的空值,比如在字典中,电话簿中"Jack"关键字下有电话号码、家庭住址、Email等等信息,但是现在只知道他的电话号码,这种不知道其他信息的情况下为了消除一些歧义,有必要将它们设置为空,所以Cocoa提供了NSNull
NSNull只有一个方法:null
[dictionary setObject:[NSNull null], forKey:"Email"];
if(EmailAdress == [NSNull null])
{
//to do something...
}
[cpp] view plaincopy
//声明并初始化一个struct
NSRect rtc = NSMakeRect(12, 32, 433, 343);
//创建一个NSValue:
//value:对象地址
//objCType:通常是一个用来描述对象类型和大小的字符串,@encode会自动生成一个合适的描述字符串
NSValue *value = [NSValue valueWithBytes:&rtc objCType:@encode(NSRect)];
//把value添加到数组中
NSMutableArray *array = [NSMutableArray arrayWithCapacity:10];
[array addObject:value];
NSRect rt;
//从数组中取到NSValue,因为只添加了一个,所以小标是0
NSValue *v = [array objectAtIndex:0];
//从value中取得一个NSRect,虽然返回值是void,但其实是它是利用指针返回值的
[v getValue:&rt];
//输出结果
NSLog(@"%f %f %f %f", rt.origin.x, rt.origin.y, rt.size.height, rt.size.width);
//用快速枚举遍历array并输出NSValue中struct属性的值
for(NSValue *v in array)
{
NSRect rt;
[v getValue:&rt];
NSLog(@"%f %f %f %f", rt.origin.x, rt.origin.y, rt.size.height, rt.size.width);
}
/////////////////////便捷的struct转换成NAValue方式////////////////////////
//声明并初始化一个struct
NSRect rtc1 = NSMakeRect(100, 200, 300, 400);
//创建一个NSValue
NSValue *value1 = [NSValue valueWithRect:rtc1];
//把value1添加到数组中
NSMutableArray *array1 = [NSMutableArray arrayWithCapacity:10];
[array1 addObject:value1];
NSRect rt1 = [value1 rectValue];
//输出结果
NSLog(@"%f %f %f %f", rt1.origin.x, rt1.origin.y, rt1.size.height, rt1.size.width); }
[cpp] view plaincopy
//函数声明,定义时,需要出现参数类型
//调用函数时,不出现数据类型 /1
//若出现数据类型,则为强制转换 /2
NSMutableArray *kbArr;
NSMutableDictionary *kbDic;
NSRect stRect = {1,20,200,200};
//NSValue *vlaue = [NSValue valueWithRect:stRect];
//1
NSValue *vlaue = [NSValue valueWithBytes:&stRect objCType:@encode(NSRect)];
//2
NSValue *vlaue1 = [NSValue valueWithBytes:(const void *)&stRect objCType:(const char *)@encode(NSRect)];
[kbArr addObject:vlaue];
[kbDic setObject:vlaue forKey:@"stRect"];
本章总结:
掌握nsnumber类的作用,实用方法。
掌握nsvalue类的作用,实用方法。
掌握nsnull类的作用,实用方法。
相关文章推荐
- 数值类对象:NSNumber,NSValue,NSNull
- 数值类对象:NSNumber,NSValue,NSNull
- 数值类对象:NSNumber,NSValue,NSNull
- Objective-C边学边记-10:Foundation Kit快速教程之 各种数值(NSNumber,NSValue,NSNull
- NSArray(不可变数组)、NSMutableArray(可变数组)、数组排序、NSNumber(多态:数值和对象互转)、NSValue(将结构体转换成对象)
- Objective-C边学边记-10:Foundation Kit快速教程之 各种数值(NSNumber,NSValue,NSNull
- iOS OC(四) 字符串NSString 可变数组NSMutableArray 不可变数组NSArray 数值对象类NSNumber NSValue 数值对象类NSNumber
- iOS Foundation框架 利用NSNumber和NSValue将非OC对象类型数据存放到集合
- iOS Foundation框架 利用NSNumber和NSValue将非OC对象类型数据存放到集合
- Objective-C中使用NSValue、NSNull、NSNumber、NSDecimalNumber、NSData、NSMutableData
- OC完全解读:Foundation框架下的NSValue,NSNumber ,NSNull,NSData,NSCalendarDate
- OC--NSValue、 NSNumber、NSNull、NSDate的使用
- iOS Foundation框架 -3.利用NSNumber和NSValue将非OC对象类型数据存放到集合
- Objective-C中使用NSValue、NSNull、NSNumber、NSDecimalNumber、NSData、NSMutableData 小结
- Objective-C中使用NSValue、NSNull、NSNumber、NSDecimalNumber、NSData、NSMutableData 小结
- OC视频笔记4.4(NSNumber的使用方法)4.5(NSValue的使用)(NSNull的使用)
- NSNumber,NSValue,NSNull
- iOS 利用NSNumber和NSValue将非OC对象类型数据存放到集合
- Objective-C的数值类NSNumber、NSValue、NSNull
- 【iOS开发】值对象--NSValue,NSNumber