NSNumber,NSValue,NSNull
2013-08-07 13:12
190 查看
http://www.cnblogs.com/elfsundae/archive/2010/10/25/1860053.html
5.各种数值
NSArray和NSDictionary只能存储对象,而不能直接存储任何基本类型的数据,如int、float 或 struct。但是你可以用对象来封装基本数值。例如,将int型数据封装到一个对象中,然后就可以将这个对象放入NSArray或NSDictionary中了。
1)NSNumber
Cocoa提供了NSNumber类来包装(即以对象形式实现)基本数据类型。
例如以下创建方法:
将基本类型数据封装到NSNumber中后,就可以通过下面的实例方法重新获取它:
术语:将一个基本类型的数据包装成对象叫做装箱(boxing),从对象中提取基本类型的数据叫做取消装箱或拆箱(unboxing)。Objective-C不支持自动装箱。
2)NSValue
NSNumber实际上是NSValue的子类,NSValue可以包装任意值。可使用下面的类方法创建新的NSValue:
传递的参数是你想要包装的数值的地址(如一个NSSize或你自己的struct),通常得到的是你想要存储的变量的地址(在C语言中使用操作符&).你也可以提供一个用来描述这个数据类型的字符串(参数objCType),通常用来说明struct中实体的类型和大小。不需要自己写这个字符串,@encode编译器指令可以接收数据类型的名称并生成合适的字符串。所以按照如下方式把NSRect放入NSArray中:
在上面的getValue: 例子中,方法名中的get表明我们提供的是一个指针,而指针所指向的空间用来存储该方法生成的数据。
Cocoa提供了将常用的struct型数据转换成NSValue的便捷方法:
例如:
3)NSNull
因为在NSArray和NSDictionary中nil中有特殊的含义(表示列表结束),所以不能在集合中放入nl值。如要确实需要存储一个表示“什么都没有”的值,可以使用NSNull类。NSNull只有一个方法:
例如:
访问如下:
5.各种数值
NSArray和NSDictionary只能存储对象,而不能直接存储任何基本类型的数据,如int、float 或 struct。但是你可以用对象来封装基本数值。例如,将int型数据封装到一个对象中,然后就可以将这个对象放入NSArray或NSDictionary中了。
1)NSNumber
Cocoa提供了NSNumber类来包装(即以对象形式实现)基本数据类型。
例如以下创建方法:
+ (NSNumber *) numberWithChar: (char) value; + (NSNumber *) numberWithInt: (int) value; + (NSNumber *) numberWithFloat: (float) value; + (NSNumber *) numberWithBool: (BOOL) value;
将基本类型数据封装到NSNumber中后,就可以通过下面的实例方法重新获取它:
- (char) charValue; - (int) intValue; - (float) floatValue; - (BOOL) boolValue; - (NSString *) stringValue;
术语:将一个基本类型的数据包装成对象叫做装箱(boxing),从对象中提取基本类型的数据叫做取消装箱或拆箱(unboxing)。Objective-C不支持自动装箱。
2)NSValue
NSNumber实际上是NSValue的子类,NSValue可以包装任意值。可使用下面的类方法创建新的NSValue:
+ (NSValue *) valueWithBytes: (const void *) value objCType: (const char *) type;
传递的参数是你想要包装的数值的地址(如一个NSSize或你自己的struct),通常得到的是你想要存储的变量的地址(在C语言中使用操作符&).你也可以提供一个用来描述这个数据类型的字符串(参数objCType),通常用来说明struct中实体的类型和大小。不需要自己写这个字符串,@encode编译器指令可以接收数据类型的名称并生成合适的字符串。所以按照如下方式把NSRect放入NSArray中:
// 将NSRect放入NSArray中 NSRect rect = NSMakeRect(1, 2, 100, 200); NSValue *rectValue = [NSValue valueWithBytes:&rect objCType:@encode(NSRect)]; [array addObject:rectValue]; // 使用getValue提取数值 // 传递参数为要存储这个数值的变量的地址 rectValue = [array objectAtIndex: 0]; [rectValue getValue:&rect];
在上面的getValue: 例子中,方法名中的get表明我们提供的是一个指针,而指针所指向的空间用来存储该方法生成的数据。
Cocoa提供了将常用的struct型数据转换成NSValue的便捷方法:
+ (NSValue *) valueWithPoint: (NSPoint) point; + (NSValue *) valueWithSIze: (NSSize) size; + (NSValue *) valueWithRect: (NSRect) rect;
- (NSPoint) pointValue; - (NSSize) sizeValue; - (NSRect) rectValue;
例如:
value = [NSValue valueWithRect: rect]; [array addObject: value]; // …. NSRect anotherRect = [value rectValue];
3)NSNull
因为在NSArray和NSDictionary中nil中有特殊的含义(表示列表结束),所以不能在集合中放入nl值。如要确实需要存储一个表示“什么都没有”的值,可以使用NSNull类。NSNull只有一个方法:
+ (NSNull *) null;
例如:
[contact setObject: [NSNull null] forKey: @"home fax"];
访问如下:
id homefax; homefax = [contact objectForKey: @"home fax"]; if (homefax == [NSNull null] { //... }
相关文章推荐
- Objective-C中使用NSValue、NSNull、NSNumber、NSDecimalNumber、NSData、NSMutableData
- OC视频笔记4.4(NSNumber的使用方法)4.5(NSValue的使用)(NSNull的使用)
- 数值类对象:NSNumber,NSValue,NSNull
- Objective-C中使用NSValue、NSNull、NSNumber、NSDecimalNumber、NSData、NSMutableData 小结
- Objective-C中使用NSValue、NSNull、NSNumber、NSDecimalNumber、NSData、NSMutableData 小结
- 数值类对象:NSNumber,NSValue,NSNull
- OC完全解读:Foundation框架下的NSValue,NSNumber ,NSNull,NSData,NSCalendarDate
- 数值类对象:NSNumber,NSValue,NSNull
- OC--NSValue、 NSNumber、NSNull、NSDate的使用
- 数值类对象:NSNumber,NSValue,NSNull
- Objective-C(十、NSRange,point,size,rect,NSNumber,NSValue,NSNull)——iOS开发基础
- NSNUmber,NSValue,NSNull
- Objective-C边学边记-10:Foundation Kit快速教程之 各种数值(NSNumber,NSValue,NSNull
- Foundation4,NSNumber,NSValue,NSNull,NSDate
- Objective-C边学边记-10:Foundation Kit快速教程之 各种数值(NSNumber,NSValue,NSNull
- NSNumber和NSValue对基础C数据类型的对象化封装
- NSNumber,NSValue和NSData
- 用NSNumber和NSValue基本数据类型和结构体的封装
- 黑马程序员-13-Foundation(NSNumber,NSDate,NSValue)
- Foundation中的NSNumber与NSValue