Objective-C边学边记-10:Foundation Kit快速教程之 各种数值(NSNumber,NSValue,NSNull

Objective-C边学边记-10:Foundation Kit快速教程之 各种数值(NSNumber,NSValue,NSNull,第1张

概述NSArray和NSDictionary只能存储对象,而不能直接存储任何基本类型的数据,如int、float 或 struct。但是你可以用对象来封装基本数值。例如,将int型数据封装到一个对象中,然后就可以将这个对象放入NSArray或NSDictionary中了。 1)NSNumber Cocoa提供了NSNumber类来包装(即以对象形式实现)基本数据类型。 例如以下创建方法:


NSArray和NSDictionary只能存储对象,而不能直接存储任何基本类型的数据,如int、float 或 struct。但是你可以用对象来封装基本数值。例如,将int型数据封装到一个对象中,然后就可以将这个对象放入NSArray或NSDictionary中了。
1)NSNumber
Cocoa提供了NSNumber类来包装(即以对象形式实现)基本数据类型。
例如以下创建方法:

          +       (NSNumber       *      ) numberWithChar: (      char      ) value;
) numberWithInt: ( int ) numberWithfloat: ( float ) numberWithBool: (BOol) value;
复制代码

 

将基本类型数据封装到NSNumber中后,就可以通过下面的实例方法重新获取它:

- ( ) charValue;
) intValue;
) floatValue;
(BOol) boolValue;
(Nsstring ) stringValue;  


术语:将一个基本类型的数据包装成对象叫做装箱(boxing),从对象中提取基本类型的数据叫做取消装箱或拆箱(unboxing)。Objective-C不支持自动装箱。

2)NSValue
NSNumber实际上是NSValue的子类,NSValue可以包装任意值。可使用下面的类方法创建新的NSValue:

(NSValue
) valueWithBytes: ( const void ) value
objCType: (
) 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的便捷方法:

) valueWithPoint: (NSPoint) point;
) valueWithSIze: (NSSize) size;
) 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 ] forKey: @" home fax " ]; 访问如下:

id homefax;
homefax [contact objectForKey: ];
if (homefax == [NSNull ]
{
... } 复制代码 总结

以上是内存溢出为你收集整理的Objective-C边学边记-10:Foundation Kit快速教程之 各种数值(NSNumber,NSValue,NSNull全部内容,希望文章能够帮你解决Objective-C边学边记-10:Foundation Kit快速教程之 各种数值(NSNumber,NSValue,NSNull所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1061885.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存