文档章节

NSInteger,NSUInteger,NSNumber

Gong_xiao
 Gong_xiao
发布于 2015/10/15 15:40
字数 723
阅读 21
收藏 2
点赞 0
评论 0

Objective-C入门教程10:数字类型(NSInteger,NSUInteger,NSNumber)

柳志超博客 » Program » Objective-C » Objective-C入门教程10:数字类型(NSInteger,NSUInteger,NSNumber)

posted in Objective-C on 2012/12/14 by liuzc

在Objective-C中,我们可以使用c中的数字数据类型,int、float、long等。它们都是基本数据类型,而不是对象。也就是说,不能够向它们发送消息。然后,有些时候需要将这些值作为对象使用。

NSInteger、NSUInteger

当你不知道程序运行哪种处理器架构时,你最好使用NSInteger,因为在有可能int在32位系统中只是int类型,而在64位系统,int可能变是long型。除非不得不使用int/long型,否则推荐使用NSInteger。

从上面的定义可以看出NSInteger/NSUInteger是一种动态定义的类型,在不同的设备,不同的架构,有可能是int类型,有可能是long类型。

NSUInteger是无符号的,即没有负数,NSInteger是有符号的。

NSNumber

有人说既然都有了NSInteger等这些基础类型了为什么还要有NSNumber?
NSNumber可以将基本数据类型包装起来,形成一个对象,这样就可以给其发送消息,装入NSArray中等。

 NSInteger intVal = 123;
 NSNumber *numberVal = [NSNumber numberWithInteger:intVal];

 NSMutableArray* array = [NSMutableArray array];
  [array addObject:intVal];    //错误,intVal不是一个对象类型
  [array addObject:numberVal]; //正确

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

+ (NSNumber*)numberWithChar: (char)value;+ (NSNumber*)numberWithInt: (int)value;+ (NSNumber*)numberWithDouble:(double)value;+ (NSNumber*)numberWithFloat: (float)value;+ (NSNumber*)numberWithBool: (BOOL) value;...

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

- (char)charValue;- (int)intValue;- (float)floatValue;- (double)doubleValue;- (BOOL)boolValue;...

 

NSValue类

我们说像数组这样的Foundation集合只能存储对象,不能存储像int这样的基本数据类型.但是我们往往也会有这样的需求,例如需要将CGPoint或是CGRect这样的结构存储在集合中.一个NSValue对象是用来存储一个C或者Objective-C数据的简单容器。它可以保存任意类型的数据,比如int,float,char,当然也可以是指pointers, structures, and object ids。NSValue类的目标就是允许以上数据类型的数据结构能够被添加到集合里.这种结构转化为对象的方式,不就是java中的装箱(boxing)吗?不过在Objective-C中称为包装(wraping),相反的,从对象中解出基本类型,称为展开(unwraping),在java中叫拆箱(unboxing).

NSNumber 继承自NSObject,可使用compare、isEqual等消息。
NSNumber是NSValue的子类。NSValue可包装任意类型值。

前面我们也介绍了Objective-C中的一些特殊数据类型:Objective-C入门教程05:特殊数据类型
更多关于NSValue的信息可以查看官方文档:NSValue Class Reference
更多信息可以参考:Foundation Data Types Reference


© 著作权归作者所有

共有 人打赏支持
Gong_xiao
粉丝 2
博文 55
码字总数 7990
作品 0
南京
iOS开发之int,NSInteger,NSUInteger,NSNumber的使用

这篇介绍几种变量类型的区别和注意点,虽然简单.但比较实用. 1、当需要使用int类型的变量的时候,可以像写C的程序一样,用int,也可以用NSInteger,但更推荐使用NSInteger,因为这样就不用考虑...

今日竹石 ⋅ 2014/01/23 ⋅ 0

OC 类型转换

NSUInteger转换为NSNumber可以通过 NSNumber *aNumber = [NSNumber numberWithInteger:21]; 来转换,然后把NSNumber放到数组里 最后要用数据的时候,把NSNumber从数组里取出来,然后通过 NS...

huluo666 ⋅ 2014/07/08 ⋅ 0

OC---数据类型

一.基本类型,基于foundation数据类型,C语言数据类型等 * 常见的object-c的数据类型有那些, 和C的基本数据类型有什么区别?如:NSInteger和int object-c的数据类型有NSString,NSNumber,N...

0_0Loong ⋅ 2015/05/21 ⋅ 0

OC NSNumber NSInteger 直接赋值问题

一 问题描述 类对象的属性id类型是NSNumber ,设置UI 的 tag(NSInteger类型)时候,数据失真。 id属性是1,tag 取出来为19。 1.1 UI tag 属性 //@property(nonatomic) NSInteger tag; 1.2 ...

卧龙小 ⋅ 2015/04/08 ⋅ 0

温故而知新-基本数据类型

大家都知道,objective-c是c语言的超集,所以温故知新系列的每一篇文章就先从c语言开始说起![c语言数据类型][1] [1]: http://static.oschina.net/uploads/space/2014/1011/105242_Vs92_66076...

sirier ⋅ 2014/10/11 ⋅ 0

Objective-C之数字对象

int , float , long都是OC的基本数据类型,但是(!important)它们都不是对象。但是有的时候需要将他们最为一个对象来使用,例如:NSArray要求存储的值必须是对象。那么这里就可以使用NSN...

Aonaufly ⋅ 2017/12/24 ⋅ 0

NSArray的排序方法

分类: iOS2012-08-09 19:30 6348人阅读 评论(0) 收藏 举报 interface 目录(?)[+] 1.sortedArrayUsingSelector (按Key值大小对NSDictionary排序) 因为NSDictionary没有compare的排序比较方...

andyhe91 ⋅ 2013/12/07 ⋅ 0

获取当前时间的 年月日时分秒

NSDate *now = [NSDate date]; NSLog(@"now date is: %@", now); NSCalendar *calendar = [NSCalendar currentCalendar]; NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit......

wuc ⋅ 2016/04/27 ⋅ 0

iOS 开发中获取当前系统日期

NSDate * senddate=[NSDate date]; NSCalendar * cal=[NSCalendar currentCalendar]; NSUInteger unitFlags=NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit; NSDateComponents *......

andyhe91 ⋅ 2013/06/03 ⋅ 0

记录一下iOS开发中琐碎的点点_2

modal出来新控制器半透明 modalPresentationStyle属性必须在之前赋值, 否则无效.... 2. 应用状态发生变化时候发出的通知 3. UIViewController的automaticallyAdjustsScrollViewInsets属性 au...

hell03W ⋅ 2016/04/13 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

LVM

LVM: 硬盘划分分区成物理卷->物理卷组成卷组->卷组划分逻辑分区。 1.磁盘分区: fdisk /dev/sdb 划分几个主分区 输入t更改每个分区类型为8e(LVM) 使用partprobe生成分区的文件:如/dev/sd...

ZHENG-JY ⋅ 37分钟前 ⋅ 0

彻底删除Microsoft Office的方法

参照此链接彻底删除Office https://support.office.com/zh-cn/article/%e4%bb%8e-pc-%e5%8d%b8%e8%bd%bd-office-9dd49b83-264a-477a-8fcc-2fdf5dbf61d8?ui=zh-CN&rs=zh-CN&ad=CN......

Kampfer ⋅ 52分钟前 ⋅ 0

大盘与个股之间关系

大盘走多:积极出手 顺势加码 大盘走空: 少量出手 退场观望 大盘做头:逆势减码 少量操作 大盘做底 : 小量建仓 小量试单

guozenhua ⋅ 53分钟前 ⋅ 0

Day16 LVM(逻辑卷管理)与磁盘故障小案例

lvm详解 简述 LVM的产生是因为传统的分区一旦分区好后就无法在线扩充空间,也存在一些工具能实现在线扩充空间但是还是会面临数据损坏的风险;传统的分区当分区空间不足时,一般的解决办法是再...

杉下 ⋅ 今天 ⋅ 0

rsync实现多台linux服务器的文件同步

一、首先安装rsync,怎样安装都行,rpm,yum,还是你用源码安装都可以。因为我用的是阿里云的ESC,yum install rsync就ok了。 二、配置rsync服务 1.先建立个同步数据的帐号 123 groupadd r...

在下头真的很硬 ⋅ 今天 ⋅ 0

前端基础(三):函数

字数:1685 阅读时间:5分钟 函数定义 在最新的ES规范中,声明函数有4中方法: -函数声明 -函数表达式 -构造函数Function -生成器函数 1.函数声明 语法: function name([param[, param2 [....

老司机带你撸代码 ⋅ 今天 ⋅ 0

Java虚拟机的Heap监狱

在Java虚拟机中,我是一个位高权重的大管家,他们都很怕我,尤其是那些Java 对象,我把他们圈到一个叫做Heap的“监狱”里,严格管理,生杀大权尽在掌握。 中国人把Stack翻译成“栈”,把Hea...

java高级架构牛人 ⋅ 今天 ⋅ 0

Spring MVC基本概念

只写Controller

颖伙虫 ⋅ 今天 ⋅ 0

微软重金收购GitHub的背后逻辑原来是这样的

全球最大的开发者社区GitHub网站花落谁家的问题已经敲定,微软最终以75亿美元迎娶了这位在外界看来无比“神秘”的小家碧玉。尽管此事已过去一些时日,但整个开发者世界,包括全球各地的开源社...

linux-tao ⋅ 今天 ⋅ 0

磁盘管理—逻辑卷lvm

4.10-4.12 lvm 操作流程: 磁盘分区-->创建物理卷-->划分为卷组-->划分成逻辑卷-->格式化、挂载-->扩容。 磁盘分区 注: 创建分区时需要更改其文件类型为lvm(代码8e) 分区 3 已设置为 Linu...

弓正 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部