数字类型(NSInteger,NSUInteger,NSNumber)
在Objective-C中,我们可以使用c中的数字数据类型,int、float、long等。它们都是基本数据类型,而不是对象。也就是说,不能够向它们发送消息。然后,有些时候需要将这些值作为对象使用。
当你不知道程序运行哪种处理器架构时,你最好使用NSInteger,因为在有可能int在32位系统中只是int类型,而在64位系统,int可能变是long型。除非不得不使用int/long型,否则推荐使用NSInteger。
从上面的定义可以看出NSInteger/NSUInteger是一种动态定义的类型,在不同的设备,不同的架构,有可能是int类型,有可能是long类型。
NSUInteger是无符号的,即没有负数,NSInteger是有符号的。
有人说既然都有了NSInteger等这些基础类型了为什么还要有NSNumber?
NSNumber可以将基本数据类型包装起来,形成一个对象,这样就可以给其发送消息,装入NSArray中等。
|
1
2
3
4
5
6
|
NSIntegerintVal=123;
NSNumber*numberVal=[NSNumber numberWithInteger:intVal];
NSMutableArray*array=[NSMutableArrayarray];
[array addObject:intVal]; //错误,intVal不是一个对象类型
[array addObject:numberVal];//正确
|
Cocoa提供了NSNumber类来包装(即以对象形式实现)基本数据类型。
|
1
2
3
4
5
6
|
+(NSNumber*)numberWithChar:(char)value;
+(NSNumber*)numberWithInt:(int)value;
+(NSNumber*)numberWithDouble:(double)value;
+(NSNumber*)numberWithFloat:(float)value;
+(NSNumber*)numberWithBool:(BOOL)value;
...
|
将基本类型数据封装到NSNumber中后,就可以通过下面的实例方法重新获取它:
|
1
2
3
4
5
6
|
-(char)charValue;
-(int)intValue;
-(float)floatValue;
-(double)doubleValue;
-(BOOL)boolValue;
...
|
我
们说像数组这样的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
数字类型(NSInteger,NSUInteger,NSNumber)的更多相关文章
- object-c中的int NSInteger NSUInteger NSNumber辨析
object-c中的int NSInteger NSUInteger NSNumber辨析 #import <Foundation/Foundation.h> int main(int a ...
- iOS开发之int,NSInteger,NSUInteger,NSNumber的使用
1.首先先了解下NSNumber类型: 苹果官方文档地址:https://developer.apple.com/library/ios/documentation/Cocoa/Reference/F ...
- ios开发 int,NSInteger,NSUInteger,NSNumber
分享一下,在工作工程中遇到的一些不留心的地方: 1.当需要使用int类型的变量的时候,可以像写C的程序一样,用int,也可以用NSInteger,但更推荐使用NSInteger,因为这样就不用考虑设备 ...
- int, NSInteger, NSUInteger, NSNumber的区别
新手在接触iOS或者Mac开发的时候,看到int和NSInteger,一般不清楚应该用哪个比较合适.我们先来查看下NSInteger的定义 #if __LP64__ || (TARGET_OS_EMB ...
- Java里面,反射父类里面数字类型字段,怎么set值
Java里面,反射父类里面数字类型字段,怎么set值,我的做法是这样: /** * TODO 直接设置对象属性值, 忽略private/protected 修饰符, 也不经过setter * @aut ...
- javascript类型系统——Number数字类型
× 目录 [1]定义 [2]整数 [3]浮点数[4]科学记数[5]数值精度[6]数值范围[7]特殊数值[8]转成数值[9]实例方法 前面的话 javascript只有一个数字类型,它在内部被表示为64 ...
- asp检测数字类型函数
'**************************************************'函数ID:0014[检测ID是否为数字类型]'函数名:JCID'作 用:检测ID是否为数字类型' ...
- Javascript如何判断一个变量是数字类型?
isNaN()不能判断一个变量是否为数字类型,isNaN(123)值为false,isNaN('123')值也为false.isNaN() 的实际作用跟它的名字isNaN并不一致,isNaN(NaN) ...
- Swift数字类型之间的转换
Swift数字类型之间的转换Swift是一种安全的语言,对于类型的检查非常严格,不同类型之间不能随便转换.一.整型之间的转换在C和Objective-C等其他语言中,整型之间有两种转换方法:从小范围数 ...
随机推荐
- poj 2376 选择工作区间问题 贪心算法
题意:给一些工作区间,如何选取最小的工作数量,覆盖[1,T]的工作时长 一开始的思路,当然也是错误的思路: 我想着,最小工作数量是吧?那肯定就是选择结束时间最晚的,给结束时间来一个排序.哎这个思路错误 ...
- 数据结构和算法(What Why How)
数据结构和算法是什么? 从广义上讲,数据结构就是指一组数据的存储结构.算法就是操作数据的一组方法. 从狭义上讲,是指某些著名的数据结构和算法,比如队列.堆.栈.二分查找.动态规划等. 数据结构和算法有 ...
- 03_HibernateSessionFactory源码分析
文章导读: 讲解了一个线程为什么要使用同一个connection, 我们分析了HiberatenSessionFactory的实现机制, 然后根据Hibernate的写法重构了我们的代码. 最后测试可 ...
- bat 文件读取乱码问题
使用 for 循环 type file1.txt > file2.txt 文件读取后可能会出现乱码,需要在 bat 文件中设置 chcp 表示将批处理设置为 utf-8 编码,这样在生成文件和读 ...
- postgres 用户管理
首次安装完成 pg 数据库后,会默认自带一个用户, 用户名: postgres 密码: postgres 可以使用命令 \du 查看数据库用户 创建新用户: create user dev with ...
- 九度oj 1003
前几天开刷九度oj,准备把做的题都放上,先放1003 题目1003:A+B 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:16923 解决:7029 题目描述: 给 ...
- Linux定时任务Crontab命令详解 转
linux 系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的.另 外, 由于使用者自己也可以设置计划任务,所 ...
- CS231n笔记 Lecture 2 Image Classification pipeline
距离度量\(L_1\) 和\(L_2\)的区别 一些感性的认识,\(L_1\)可能更适合一些结构化数据,即每个维度是有特别含义的,如雇员的年龄.工资水平等等:如果只是一个一般化的向量,\(L_2\)可 ...
- 【Luogu】P2351吊灯(脑洞后模拟)
题目链接 这题要智商qwq.玩不来玩不来. 观察到(个P,能观察到的全都是dalao)x是解的充要条件是至少有n/x个节点的size是x的倍数. 证明请看这里 然后这题就变模拟了呀. #include ...
- HDU——1027Ignatius and the Princess II(next_permutation函数)
Ignatius and the Princess II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ( ...