数字对象NSNumber的使用
先简述下关于NSNumber的信息
- NSNumber的存在就相当于java中的装箱与拆箱。只不过java中的装箱拆箱过程,使用的是对应的类型,比如基本数据类型是int、double类型,装箱时就得对应使用Integer、Double类型。而Objective-C中,使用的都是NSNumer类型。也因此NSNumber其实是一个类簇,而不是一个类。
- 在Objective-C编程中,常常是需要将基本数据类型转换为对象来使用的。比如,NSArray、NSDictionary中只能放id类型(即对象类型)。服务器返回的JSON数据解析后是包含的是NSNumber而不是基本数据类型。
- NSNumber是继承于NSValue。
- 正是因为NSNumber是一个类簇,会导致使用NSNumber装箱BOOL类型,后面却拆箱成NSInteger类型。虽然基本数据类型之间是有一套相互转换的机制的,但是为了方便省事,建议就不要进行骚操作了吧。
接下来主要就是细致化的把对应的封装、拆箱的方法罗列出来。
一、创建一个NSNumber对象(装箱)
// char
+ (NSNumber *)numberWithChar:(char)value; // 无符号char
+ (NSNumber *)numberWithUnsignedChar:(unsigned char)value; // short
+ (NSNumber *)numberWithShort:(short)value; // 无符号short
+ (NSNumber *)numberWithUnsignedShort:(unsigned short)value; // int
+ (NSNumber *)numberWithInt:(int)value; // 无符号int
+ (NSNumber *)numberWithUnsignedInt:(unsigned int)value; // long
+ (NSNumber *)numberWithLong:(long)value; // 无符号long
+ (NSNumber *)numberWithUnsignedLong:(unsigned long)value; // long long
+ (NSNumber *)numberWithLongLong:(long long)value; // 无符号long long
+ (NSNumber *)numberWithUnsignedLongLong:(unsigned long long)value; // float
+ (NSNumber *)numberWithFloat:(float)value; // double
+ (NSNumber *)numberWithDouble:(double)value; // BOOL
+ (NSNumber *)numberWithBool:(BOOL)value; // NSInteger
+ (NSNumber *)numberWithInteger:(NSInteger)value; // NSUInteger
+ (NSNumber *)numberWithUnsignedInteger:(NSUInteger)value;
二、初始化一个NSNumber对象(装箱)
// char
- (NSNumber *)initWithChar:(char)value; // 无符号char
- (NSNumber *)initWithUnsignedChar:(unsigned char)value; // short
- (NSNumber *)initWithShort:(short)value; // 无符号short
- (NSNumber *)initWithUnsignedShort:(unsigned short)value; // int
- (NSNumber *)initWithInt:(int)value; // 无符号int
- (NSNumber *)initWithUnsignedInt:(unsigned int)value; // long
- (NSNumber *)initWithLong:(long)value; // 无符号long
- (NSNumber *)initWithUnsignedLong:(unsigned long)value; // long long
- (NSNumber *)initWithLongLong:(long long)value; // 无符号long long
- (NSNumber *)initWithUnsignedLongLong:(unsigned long long)value; // float
- (NSNumber *)initWithFloat:(float)value; // double
- (NSNumber *)initWithDouble:(double)value; // BOOL
- (NSNumber *)initWithBool:(BOOL)value; // NSInteger
- (NSNumber *)initWithInteger:(NSInteger)value; // NSUInteger
- (NSNumber *)initWithUnsignedInteger:(NSUInteger)value;
三、获取NSNumber中的基础数据类型(拆箱)
// char
@property (readonly) char charValue; // 无符号char
@property (readonly) unsigned char unsignedCharValue; // short
@property (readonly) short shortValue; // 无符号short
@property (readonly) unsigned short unsignedShortValue; // int
@property (readonly) int intValue; // 无符号int
@property (readonly) unsigned int unsignedIntValue; // long
@property (readonly) long longValue; // 无符号long
@property (readonly) unsigned long unsignedLongValue; // long long
@property (readonly) long long longLongValue; // 无符号long long
@property (readonly) unsigned long long unsignedLongLongValue; // float
@property (readonly) float floatValue; // double
@property (readonly) double doubleValue; // BOOL
@property (readonly) BOOL boolValue; // NSInteger
@property (readonly) NSInteger integerValue; // NSUInteger
@property (readonly) NSUInteger unsignedIntegerValue;
四、检索字符串表示
NSNumber *intNun = [NSNumber numberWithChar:"c"];
NSLog(@"~~~~~~~~~~%@", [intNun description]);
NSLog(@"~~~~~~~~~~%@", [intNun descriptionWithLocale:nil]);
====打印
~~~~~~~~~~-
~~~~~~~~~~-
五、比较NSNumber对象
typedef NS_ENUM(NSInteger, NSComparisonResult) {
NSOrderedAscending = -1L, //升序(左 < 右)
NSOrderedSame, // 相等(左 = 右)
NSOrderedDescending //降序(左 > 右)
};
// 如果两个NSNumber装箱的基本数据类型不一致。按照标准C的基本数据类型转换后,进行比较
- (NSComparisonResult)compare:(NSNumber *)otherNumber;
// 如果是两个数字型的NSNumber对象的比较,用此方法比compare:方法效率更高
- (BOOL)isEqualToNumber:(NSNumber *)number;
标准C语言的基本数据类型介绍,请移步【】
标准C语言的基本数据类型转换规则,请移步【】
数字对象NSNumber的使用的更多相关文章
- 数字对象NSNumber
//将int类型转化成对象 ; NSNumber *numberString = [NSNumber numberWithInt:number]; //对象是可以放入数组的 NSArray *arra ...
- 黑马程序员_ Objective-c 之Foundation之NSNumber ,NSValue, NSDate
Objective-c 之Foundation之NSNumber ,NSValue, NSDate 1.NSNumber具体用法如下: 在Objective-c中有int的数据类型,那为什么还要使用数 ...
- NSIntger CGFloat NSNumber
NSIntger CGFloat NSNumber 1.NSIntger (long) %ld NSInteger a=; NSLog(@"----------%ld",(l ...
- NSNumber
integerfloatc 在Objective-c中有int的数据类型,那为什么还要使用数字对象NSNumber?这是因为很多类(如NSArray)都要求使用对象,而int不是对象.NSNumber ...
- oc随笔四:NSString、NSNumber
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { ...
- objective-c常用方法列表(总结)
第1章 Objective-C学习环境准备 1.1 Objective-C基础 1.1.1 Objective-C的发展历程 1.1.2 Objective-C语言的特点 1.1.3 技术架构 1.2 ...
- oc语言的Foundation框架(学习笔记2)
紧接上文…… 4.集合对象 4.1数组 1.基本概念 Foundation中的数组(NSArray,NSMutableArray)是一组有序的对象集合,通过索引下标获取到数组中的各个元素,也分可变和不 ...
- NSNumber、NSValue、NSDate、NSObject
注:OC中数组和字典只能存储OC对象不能存放基本数据类型. NSNumber NSNumber可以用来把一个基本数据类型包装成一个NSNumber类型的对象. NSNumber *number = [ ...
- _int、NSInteger、NSUInteger、NSNumber的区别和联系
1.首先先了解下NSNumber类型: 苹果官方文档地址:https://developer.apple.com/library/ios/documentation/Cocoa/Reference/F ...
随机推荐
- robot用例执行常用命令
执行命令 执行一个用例 robot -t “testcase_name“ data_test.robot 按用例文件执行 robot data_test.robot或者 robot --suite “ ...
- css 中 max-width 和 min-width 的区别
max-width:规定元素本身最大宽度,即元素本身 (该div) 的宽度应小于等于其最大宽度值. min-width:规定元素本身最小宽度,即元素本身应大于等于其宽度值. 例:min-width:1 ...
- IDEA Tomcat配置 VM Option
-server -XX:PermSize=512M -XX:MaxPermSize=1024m -Dfile.encoding=UTF-8
- Rsync+inotify数据同步
安装环境 备份服务器端:CentOS7,IP:192.168.1.100 备份客户端:CentOS7,IP:192.168.1.200 服务器端Rsync服务部署 1.安装程序包 # yum –y i ...
- 洛谷 P2118 比例简化(枚举)
嗯... 题目链接:https://www.luogu.org/problem/P2118 这道题的出题人很善良,l的范围不是很大,所以我们可以逐一枚举. 本题主要思想就是把所有的比例都转换为乘积的形 ...
- 【代码学习】PYTHON 文件I/O
一.文件的打开和关闭 open(文件名,访问模式) cloese() 模式 描述 r 以只读方式打开文件.文件的指针将会放在文件的开头.这是默认模式. rb 以二进制格式打开一个文件用于只读.文件指针 ...
- 201771010135杨蓉庆 《面向对象程序设计(java)》第三周学习总结
一:第1-3章学习内容: 第一章:复习基本数据类型 整型 byte(1个字节 表示范围:-2^7 ~ (2^7)-1) short(2个字节 表示范围:-2^15~(2^15)-1) int(4个字节 ...
- AOP统一日志打印处理
在日常开发工作中,我们免不了要打印很多log.而大部分需要输出的log又是重复的(例如传入参数,返回值).因此,通过AOP方式来进行日志管理可以减少很多代码量,也更加优雅. Springboot通过A ...
- 【docker问题】Client.Timeout exceeded while awaiting headers
在进行docker pull 拉取镜像时,出现过下面的错误: net/http: request canceled while waiting for connection (Client.Timeo ...
- 【PAT甲级】1060 Are They Equal (25 分)(需注意细节的模拟)
题意: 输入一个正整数N(<=100),接着输入两个浮点数(可能包含前导零,对于PAT已经习惯以string输入了,这点未知),在保留N位有效数字的同时判断两个数是否相等,并以科学计数法输出. ...