各种数值

NSArray和NSDictionary都只能存储对象,不能存储任何基本类型的数据,如int,float,struct。因此我们可以用对象来封装基本的数值。

NSNumber

Cocoa提供了NSNumber来存储对象,但不能存储C里面的各种数据,所以我们要用一些相应的对象来进行封装。

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;

NSValue

NSNumber实际上是NSValue的子类,NSValue可以包装任意值,你可以用NSValue将结构放入NSArray和NSDictionary中,通过下列方法创建新的NSValue:

+ (NSValue *) valueWithBytes:(const void *) values

objCType:(constchar*) type;

传递的参数是你想要包装的数值的地址(如一个NSSize或者你自己的struct)。通常,得到的是你想要存储的变量的地址,你也可以提供一个用来描述这个数据类型的字符串,通常用来说明struct中实体的类型和大小。如下例所示,将NSRect放入到NSArray中:

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

NSValue *value;

value = [NSValue valueWithBytes: &rect

objCType: @encode(NSRect)];

[array addObject: value];

可以使用getValue:来提供数值:

- (void) getValue: (void *) vaule;

调用getValue:时,要传递的是要存储这个数值的变量的地址:

value = [array objectAtIndex:0];

[value getValue: &rect];

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];

NSNull

有时确实需要存一个NULL值,而大多数的对象里面是不允许存nil值的,那么使用NSNull就可以解决这个问题。

+ (NSNull *) null;

例:

[contact setObject:[NSNull null]

forKey:@”home fax machine”];

那么怎么进行访问及判断呢:

id homefax;

homefax = [contact objectForKey:@”home fax machine”];

if(homefax == [NSNull null])

{

//…no fax machine

}

objective-c之各种数值的更多相关文章

  1. Automake

    Automake是用来根据Makefile.am生成Makefile.in的工具 标准Makefile目标 'make all' Build programs, libraries, document ...

  2. iOS开发核心语言Objective C —— 全部知识点总结

    本分享是面向有意向从事iOS开发的伙伴及苹果产品的发烧友,亦或是已经从事了iOS的开发人员,想进一步提升者.假设您对iOS开发有极高的兴趣,能够与我一起探讨iOS开发.一起学习,共同进步.假设您是零基 ...

  3. 第一章 熟悉Objective -C 编写高质量iOS与OS X代码的52 个有效方法

    第一章 熟悉Objective -C   编写高质量iOS与OS  X代码的52 个有效方法   第一条: 了解Objective-C 语言的起源 关键区别在于 :使用消息结构的语言,其运行时所应执行 ...

  4. 04实现累加和计算功能并且实现textbox不允许输入数字以外的字符但不包括退格键同时不允许第一个数值为0

    private void button1_Click(object sender, EventArgs e) { double number1, number2; if (double.TryPars ...

  5. Java判断字符串是否是数值

    判断一个字符串是否是数值,可以用正则表达式来判断.更简单的方法是把字符串转换成Float或者Double,然后捕捉NumberFormatException错误,如果有错误,就说明不是一个数值,如果没 ...

  6. 写出将字符串中的数字转换为整型的方法,如:“as31d2v”->312,并写出相应的单元测试,正则去掉非数值、小数点及正负号外的字符串

    写出将字符串中的数字转换为整型的方法,如:"as31d2v"->312,并写出相应的单元测试,输入超过int范围时提示不合法输入. public struct Convert ...

  7. Euler-Maruyama discretization("欧拉-丸山"数值解法)

    欧拉法的来源 在数学和计算机科学中,欧拉方法(Euler method)命名自它的发明者莱昂哈德·欧拉,是一种一阶数值方法,用以对给定初值的常微分方程(即初值问题)求解.它是一种解决常微分方程数值积分 ...

  8. Javascript数值转换(string,int,json)

    数值: 在JavaScript中,数值转换一般有三种方式: 一.Number(param)函数:param可以用于任何数据类型 1.1 param是Boolean值,true和false分别转换为1和 ...

  9. javascript之循环保存数值

    javascript之循环保存数值 语言都是相通的,这句话在我学javascript时有的深刻的意识.js中的for循环与java中的for循环有很大相似之处. 先看下面这段代码 for(var i= ...

  10. MYSQL字符类型数值排序

    今天遇到MySQL数字排序问题,我的排序字段是经过计算后的,而计算后的字段直接拿来排序就会按照字符一个个排序,所以这里找到简单的方法, ORDER BY 排序字段* 或者 ORDER BY 排序字段+ ...

随机推荐

  1. Bitmap与Matrix旋转ImageView

    Bitmap与Matrix旋转ImageView 标签: matrixfloatbutton测试importlayout 2010-08-23 22:18 8569人阅读 评论(0) 收藏 举报  分 ...

  2. Activity与Activity之间的传值

    //----------Activity1中的布局--------------------------------- <LinearLayout xmlns:android="http ...

  3. img图片inline-block总结

    <div style="font-size:0;"> <img data-src="http://image.zhangxinxu.com/image/ ...

  4. struts2+ajax实现异步验证

    由于老师布置作业的需要,在添加管理员的时候,要实现验证添加的管理员的用户名是否在数据库中已经存在,然后再客户端给用户一个提示.我首先想到的就是利用ajax实现异步验证技术,由于利用的ssh框架,所以在 ...

  5. java 基础的几种算法

    1:冒泡排序:2个之间进行循环筛选   public void sort(int[] a) { int temp = 0; for (int i = a.length - 1; i > 0; i ...

  6. [原]左右的移动&lt;&lt;&gt;&gt;&lt;&gt;jQuery的实现

    $(function () {             $('#toAllLeft').click(function () {                 $('#se1 option').app ...

  7. 转:loadrunner ---循环输出关联数组

    web_reg_save_param,将Ord参数值设定为ALL,则关联函数将自动把符合条件的关联值保存到参数数组里.在本例中,假设关联值返回三条记录,则LR分别将值保存到sor_1,sor_2,so ...

  8. SVM支持向量机算法

    支持向量机(SVM)是另一类的学习系统,其众多的优点使得他成为最流行的算法之一.其不仅有扎实的理论基础,而且在许多应用领域比大多数其他算法更准确.  1.线性支持向量机:可分情况 根据公式(1)< ...

  9. SQL Server2008数据库中删除用户,提示数据库主体在该数据库中拥有 架构,无法删除

    一个数据库,运行在SQL Server 2008下,数据库用户无法删除,在删除时提示“数据库主体在该数据库中拥有架构,无法删除”.原因很简单,就是由于此用户在数据库中拥有某些架构的所有权,将相关架构的 ...

  10. angularJs关于指令的一些冷门属性

    我们使用ng的时候,经常会使用到指令,大家所熟知的属性我在这里就不介绍了,讲讲大家没怎么留意的属性 1.multiElement 这是指定指令作用区间的功能,最常用的就是ng-repeat-start ...