OC基础 — NSNumber

  • github

项目 简介
MGDS_Swif 逗视视频直播
MGMiaoBo 喵播视频直播
MGDYZB 斗鱼视频直播
MGDemo n多小功能合集
MGBaisi 高度仿写百思
MGSinaWeibo 高度仿写Sina
MGLoveFreshBeen 一款电商App
MGWeChat 小部分实现微信功能
MGTrasitionPractice 自定义转场练习
DBFMDemo 豆瓣电台
MGPlayer 一个播放视频的Demo
MGCollectionView 环形图片排布以及花瓣形排布
MGPuBuLiuDemo 瀑布流--商品展
MGSlideViewDemo 一个简单点的侧滑效果,仿QQ侧滑
MyResume 一个展示自己个人简历的Demo
GoodBookDemo 好书
Snip20161026_15.png

Snip20161026_16.png

Snip20161026_35.png
逗视介绍1.gif

逗视介绍2.gif

  • 前言:在编程的过程中,一些基本数据类型的变量是必不可少的。但是在OC编程语言当中,OC的消息机制并不能向这些基本数据类型发送消息,而且OC的集合当中是不能存放基本数据类型的,所以我们就需要将基本数据类型转化成对象来使用。OC中提供了NSNumber类来将基本数据类型“包装”成数字对象,这样我们就可以将基本数据类型当做对象来处理了。

1.NSNumber基本使用

  • NSNumber可以将基本数据类型包装成对象,也可以将包装后的对象还原成基本数据类型,以下演示常用的几种基本数据类型的包装过程:
-(void) test{
       // 封装基本数据类型(int,float,double,char,BOOL)
       int basicInt = 6;
       float basicFloat = 3.14;
       double basicDouble = 0.85;
       char basicChar = 'c';
       BOOL basicBool = 1;
 
        // 创建int型对象
        NSNumber *objectInt = [NSNumber numberWithInt:basicInt];
        NSLog(@"objectInt = %@", objectInt);
        NSLog(@"还原后:%d", [objectInt intValue]);
 
        // 创建float型对象
        NSNumber *objectFloat = [NSNumber                                 numberWithFloat:basicFloat];
        NSLog(@"objectFloat = %@", objectFloat);
        NSLog(@"还原后:%f", [objectFloat floatValue]);
 
        // 创建double型对象
        NSNumber *objectDouble = [NSNumber numberWithDouble:basicDouble];
        NSLog(@"objectDouble = %@", objectDouble);
        NSLog(@"还原后:%f", [objectDouble doubleValue]);
 
       // 创建char型对象
       NSNumber *objectChar = [NSNumber    numberWithChar:basicChar];
       NSLog(@"objectChar = %@", objectChar); // 打印出ASCII码值
       NSLog(@"还原后:%c", [objectChar charValue]);
 
       // 创建BOOL型对象
       NSNumber *objectBool = [NSNumber numberWithBool:basicBool];
       NSLog(@"objectBOOL = %@", objectBool);
       NSLog(@"还原后:%d", [objectBool boolValue]);
 
       //快速创建的方法
       NSNumber *intNum = @80; // ---> [NSNumber numberWithInt:80];
 
       NSNumber *floatNum = @3.14; // --->[NSNumber numberWithFloat:3.14];
 
       NSNumber *boolNum = @YES; // ---> [NSNumber numberWithBool:YES];
 
       NSNumber *charNum = @'a'; // ---> [NSNumber numberWithChar:'a'];
 
       // 快速创建变量需要将变量放在括号中
       double height = 1.83;
       NSNumber *doubleNum = @(height); // ---> [NSNumber numberWithDouble:height];
 
       NSArray *array = @[intNum, floatNum, boolNum, charNum, doubleNum];
       NSLog(@"array : %@", array);
 
       //判断两个对象的值是否相等
       if ([intNum isEqualToNumber:floatNum] == YES ) {
          NSLog(@"值相等");
       } else {
          NSLog(@"值不相等");
       }
 
       //比较两个对象的值大小
       NSNumber *myNumber = @30;
       if ([intNum compare:myNumber] == NSOrderedAscending) {
          NSLog(@"第一个数字小");
       } else { 
          NSLog(@"第一个数字大");
       }
}
NSNumber基本使用.png
  • 类方法创建一般都会有相应的实例初始化方法与之对应:
- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithChar:(char)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithUnsignedChar:(unsigned char)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithShort:(short)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithUnsignedShort:(unsigned short)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithInt:(int)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithUnsignedInt:(unsigned int)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithLong:(long)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithUnsignedLong:(unsigned long)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithLongLong:(long long)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithUnsignedLongLong:(unsigned long long)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithFloat:(float)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithDouble:(double)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithBool:(BOOL)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithInteger:(NSInteger)value NS_AVAILABLE(10_5, 2_0) NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithUnsignedInteger:(NSUInteger)value NS_AVAILABLE(10_5, 2_0) NS_DESIGNATED_INITIALIZER; 


2.int、 NSInteger、 NSUInteger、NSNumber之间的区别和联系

int : 当使用int类型定义变量的时候,可以像写C程序一样去使用。当你不知道程序运行在哪种处理器架构时,你最好使用NSInteger,因为在有可能int在32位系统中只是int类型,而在64位系统,int可能变成long型。除非不得不使用int/long型,否则推荐使用NSInteger。

NSInteger/NSUInteger是一种动态定义的类型,在不同的设备,不同的架构,有可能是int类型,有可能是long类型。NSUInteger是无符号的,即没有负数,NSInteger是有符号的。

NSInteger是基础类型,NSNumber是一个类,如果需要存储一个数值,直接使用NSInteger是不行的,因为OC的集合当中存储的数据必须是OC对象。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 01-常量与变量 学习swift第一步打印Hello World print("Hello World") swi...
    iOS_恒仔阅读 10,652评论 2 19
  • 1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch...
    阳光的大男孩儿阅读 10,470评论 0 13
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,859评论 0 9
  • 在编程的过程中,一些基本数据类型的变量是必不可少的。但是在OC编程语言当中,OC的消息机制并不能向这些基本数据类型...
    赵亦晨阅读 3,106评论 0 0
  • 梨花院上梨花新, 几度凋残几度春。 枕上得来多病句, 别来一梦是离人。 丁酉 陆离
    陈三先生阅读 962评论 0 1