Foundation Kit 三

1. NSArray 和 NSDictionary只能存储对象,而不能存储任何基本类型的数据,如int,float和struct,不过你可以用对象来封装基本数据。比如,将int型基本数据封装到一个对象中,就可以将这个对象放入NSArray和NSDictionary。

 1.1.0 NSNumber

   Cocoa提供了NSNumber类来封装,即以对象形式来实现基本数据类型。

 +(NSNumber *)numberWithChar:(char)value;

+(NSNumber *)numberWithInt:(int)int;

+(NSNumber *)numberWithFloat:(float)value;

+(NSNumber *)numberWithBool:(bool)value;

也可以用字面量的语法来创建这些对象:

NSNumber *number;

number = @'X' //字符型

number = @12345  //整型

number = @123.45f //浮点型

number = @YES      //布尔型

在将一个基本数据类型封装到NSNumber中后,你可以通过下面的实例方法获得它。

-(char)charValue;

-(int)intValue;

-(BOOL)boolValue;

-(NSString *)stringValue;

 说明: 通常将一个基本类型的数据封装成对象的过程被称为装箱 (boxing),从对象中提取基本类型的数据叫做开箱。有些语言具有自动装箱的功能,可以自动封装基础类型的数据,也可以自动从封装后的对象中提取基础数据。Objective-C语言不支持自动装箱功能。

 

2.  NSValue

   NSNumber实际上是NSValue的子类,NSValue可以封装任意值。你可以使用NSValue将结构体放入NSArray或者NSDictionary中。

+(NSValue)valueWithBytes:(const void *)value objCType:(const char *)type;

传递的参数是你想要封装的数值的地址(如一个NSSize或你自己的struct).通常你得到的是想要存储的变量的地址(在C语言中要使用操作符&)。你也可以提供一个用来描述这个数据类型的字符串,通常用来说明struct中实体的类型和大小。你不用自己写代码来生成这个字符串, @encode编译器指令可以接收数据类型的名称并为你生成合适的字符串。

  NSRect rect = NSMakeRect(1,2,30,40);

 NSValue *value = [NSValue valueWithBytes:&rect objCType:@encode(NSRect)];

[array addObject:value];

可以使用方法getValue:来提取数值:   -(void)getValue:(void *)buffer;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值