各种数值

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. Android上掌纹识别第一步:基于OpenCV的6种肤色分割 源码和效果图

    Android上掌纹识别第一步:基于OpenCV的6种肤色分割 源码和效果图 分类: OpenCV图像处理2013-02-21 21:35 6459人阅读 评论(8) 收藏 举报   原文链接  ht ...

  2. ubuntu环境下安装Tomcat

    tomcat 是javaweb开发的本地服务器,tomcat是目前比较流行的一款. 1.下载Tomcat:http://tomcat.apache.org 2.进入下载文件夹解压Tomcat:sudo ...

  3. 给input元素添加float. 去除IE6 下input的空隙

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  4. linux 命令实现原理

    我们知道有些Linux的命令涉及到一些高效率的算法,在此做出一个积累吧,不是系统的. 1.tail命令打印一个文件的最后num行 2.grep命令从文本中匹配字符串 基于正则表达式的匹配很快. it ...

  5. location对象的属性和方法应用(解析URL)

    本文将与大家分享下location对象使用属性和方法来解析URL的实例,感兴趣的朋友可以参考下,希望对你有所帮助   location对象提供了很多属性和方法用来解析URL. 复制代码代码如下: &l ...

  6. Redis学习笔记(二)-key相关命令【转载】

    转自 Redis学习笔记(二)-key相关命令 - 点解 - 博客园http://www.cnblogs.com/leny/p/5638764.html Redis支持的各种数据类型包括string, ...

  7. hbase port

    From "Jonathan Hsieh (JIRA)" <j...@apache.org> Subject [jira] [Updated] (HBASE-10123 ...

  8. IIS判断W3WP进程对应哪个网站

    IIS 6 (Win2003 )中查看某个应用程序池对应那个 W3WP.exe 进程,可以使用如下命令,输出结果类似如下: C:\WINDOWS\system32>cscript iisapp. ...

  9. 智力大冲浪(riddle)

    智力大冲浪(riddle) 题目描述 小伟报名参加中央电视台的智力大冲浪节目.本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者m元.先不要太高兴!因为这些钱还不一定都是你的?!接 ...

  10. vpn探测

    root@bt:~# ike-scan -M -v 192.168.1.102 root@bt:~# sslscan 192.168.1.102