先简述下关于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的使用的更多相关文章

  1. 数字对象NSNumber

    //将int类型转化成对象 ; NSNumber *numberString = [NSNumber numberWithInt:number]; //对象是可以放入数组的 NSArray *arra ...

  2. 黑马程序员_ Objective-c 之Foundation之NSNumber ,NSValue, NSDate

    Objective-c 之Foundation之NSNumber ,NSValue, NSDate 1.NSNumber具体用法如下: 在Objective-c中有int的数据类型,那为什么还要使用数 ...

  3. NSIntger CGFloat NSNumber

    NSIntger  CGFloat  NSNumber 1.NSIntger  (long) %ld NSInteger a=; NSLog(@"----------%ld",(l ...

  4. NSNumber

    integerfloatc 在Objective-c中有int的数据类型,那为什么还要使用数字对象NSNumber?这是因为很多类(如NSArray)都要求使用对象,而int不是对象.NSNumber ...

  5. oc随笔四:NSString、NSNumber

    #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { ...

  6. objective-c常用方法列表(总结)

    第1章 Objective-C学习环境准备 1.1 Objective-C基础 1.1.1 Objective-C的发展历程 1.1.2 Objective-C语言的特点 1.1.3 技术架构 1.2 ...

  7. oc语言的Foundation框架(学习笔记2)

    紧接上文…… 4.集合对象 4.1数组 1.基本概念 Foundation中的数组(NSArray,NSMutableArray)是一组有序的对象集合,通过索引下标获取到数组中的各个元素,也分可变和不 ...

  8. NSNumber、NSValue、NSDate、NSObject

    注:OC中数组和字典只能存储OC对象不能存放基本数据类型. NSNumber NSNumber可以用来把一个基本数据类型包装成一个NSNumber类型的对象. NSNumber *number = [ ...

  9. _int、NSInteger、NSUInteger、NSNumber的区别和联系

    1.首先先了解下NSNumber类型: 苹果官方文档地址:https://developer.apple.com/library/ios/documentation/Cocoa/Reference/F ...

随机推荐

  1. 实现在vue中element-ui的el-dialog弹框拖拽

    参考:实现在vue中element-ui的el-dialog弹框拖拽 1.在 utils 中新建 directives.js 文件 import Vue from 'vue' // v-dialogD ...

  2. Windows上面搭建FlutterAndroid运行环境

    1.下载安装JDK https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2.配置J ...

  3. 【struts 报错】 No action config found for the specified url

    1 type Exception report message org.apache.struts.chain.commands.InvalidPathException: No action con ...

  4. HTML-移动端-rem px vw vh 的转换

    vw/vh rem px 三者的转换(快速入门移动端页面编写) 1:三种单位的转换 2:如何适配移动端的不同设备 前提知识: 手机端的长宽是实际设计过程中的两倍 比如手机端是 750 * 1200 那 ...

  5. P1478

    昨天花一下午时间,把 codeblocks 代码 highlight 改了改,感觉还不错 :) 咳咳.还是说题吧. 这道题利用贪心思想,先去除所有够不着的,然后按使用力气 $ y_i $ 从小到大排序 ...

  6. VS2019 还原Resharper菜单位置

    方法: 第一步: Tools -> Customize -> Extensions Menu tab, uncheck Resharper 工具->自定义->扩展菜单-> ...

  7. LeetCode练题——67. Add Binary

    1.题目 67. Add Binary——easy Given two binary strings, return their sum (also a binary string). The inp ...

  8. Plastic Bottle Manufacturer - Different Cosmetic Plastic Bottle Materials, Different Characteristics

    Plastic bottles are usually made of PP, PE, K, AS, abs, acrylic, PET, and the like. Dust caps for th ...

  9. PTA的Python练习题(十三)

    第4章-8 求分数序列前N项和 a=eval(input()) b=2 c=1 d=0 count=0 for i in range(a): count+=b/c d=b b=b+c c=d prin ...

  10. lc 0223

    目录 ✅ 669. 修剪二叉搜索树 描述 解答 java py ✅ 883. 三维形体投影面积 描述 解答 my understanding c py py map ?? python zip(*gr ...