Objective-C 支持的类型有两种:基本类型 和  类。

基本类型,如同C 语言中的 int 类型一样,拿来就可以直接用。 而类在使用时,必须先创建一个对象,再为对象分配空间,接着做初始化和赋值。 类的初始化,需用类自身的方法 (类方法)。 代码中所创建的对象,不用后,还得记着释放。

做了这么多铺垫, 具体到 NSNumber 和 NSInteger ,又怎样呢?

NSNumber 是类, 而 NSInteger 只不过是个 基本类型。

既然 NSInteger是基本类型,那么,使用起来就非常简单。 声明一个变量, NSInteger myInt;  直接赋值就可以了。 比如: myInt=8;

谈到“类”,总是给人以抽象的感觉。像NSNumber 这个类型,从字面上看,它属于char、int、long、double 中的哪一种呢? 其实,NSNumber 可以隶属其中的任意一种类型。 这就是“类”的强大 —— 抽象,而且内嵌多种方法(method)。

既然NSNumber 是类,就应该遵循“类”的规则。 通过类方法来创建、初始化一个类的对象。

NSNumber 所拥有的类方法,如下:

+ (NSNumber*)numberWithChar: (char)value;

+ (NSNumber*)numberWithInt: (int)value;

+ (NSNumber*)numberWithFloat: (float)value;

+ (NSNumber*)numberWithBool: (BOOL) value;

NSNumber *myNumber,*floatnumber,*intNumber,*doublenumber,*charNumber;

myNumber = [NSNumber numberWithLong:0xabcdef];
        floatnumber = [NSNumber numberWithFloat:12.33];
        intNumber = [NSNumber numberWithInt:100];
       doublenumber = [NSNumber numberWithDouble:12345e+15];
       charNumber = [NSNumber numberWithChar:'X'];

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

- (char)charValue;

- (int)intValue;

- (float)floatValue;

- (BOOL)boolValue;

- (NSString*)stringValue;

myInt = [intNumber intValue]; //获取对象的整型值
      //[floatnumber floatValue];
      //[doublenumber doubleValue];
      //[charNumber charValue];

有了以上概念,我们来考一个面试题。 以下code 编译是否有误?

NSMutableArray  *myArray =[[NSMutableArrayalloc]init];

[myArray addObject:6];

这样是会引发编译错误的,因为NSMutableArray中所要存放的是一个对象,但‘6’不是。这怎么办呢? 需要用到 NSNumber。

NSMutableArray  *myArray =[[NSMutableArrayalloc]init];

[myArray addObject:[NSNumbernumberWithInt:6]];

NSLog(@"array content is %@", myArray);

NSNumber与NSInteger的区别的更多相关文章

  1. NSNumber与NSInteger的区别 -bei

    基本类型,如同C 语言中的 int 类型一样,拿来就可以直接用. 而类在使用时,必须先创建一个对象,再为对象分配空间,接着做初始化和赋值. 类的初始化,需用类自身的方法 (类方法). 代码中所创建的对 ...

  2. 包装CGFloat和用NSNumber初始化的区别?

    @(CGFloat)和[NSNumber numberWith:CGFloat]的区别?

  3. NSNumber(把数字存进数组字典等的问题)

    官方文档地址https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSNum ...

  4. Objective-C ,ios,iphone开发基础:几个常用类-NSNumber

    2013-08-21 在Objective-C,包括int double float 等等再内的基础数据类型都不是一个类,所以就不能给它们发送消息,也就是说不能调用方法,那怎么办呢 ?Objectiv ...

  5. 数值类对象:NSNumber,NSValue,NSNull

    基本,集合,复杂,对象 可用对象封装基本数值,然后将对象放入NSArray或NSDictionary 中. 用对象封装基本数值后,即可给其发送消息. 数值类型包括:NSNumber,NSValue,N ...

  6. 数字对象NSNumber的使用

    先简述下关于NSNumber的信息 NSNumber的存在就相当于java中的装箱与拆箱.只不过java中的装箱拆箱过程,使用的是对应的类型,比如基本数据类型是int.double类型,装箱时就得对应 ...

  7. iOS开发系列--Swift进阶

    概述 上一篇文章<iOS开发系列--Swift语言>中对Swift的语法特点以及它和C.ObjC等其他语言的用法区别进行了介绍.当然,这只是Swift的入门基础,但是仅仅了解这些对于使用S ...

  8. iOS开发系列—Objective-C之Foundation框架

    概述 我们前面的章节中就一直新建Cocoa Class,那么Cocoa到底是什么,它和我们前面以及后面要讲的内容到底有什么关系呢?Objective-C开发中经常用到NSObject,那么这个对象到底 ...

  9. iOS-几大框架的介绍

    1.Objective-C之Foundation框架 概述 我们前面的章节中就一直新建Cocoa Class,那么Cocoa到底是什么,它和我们前面以及后面要讲的内容到底有什么关系呢?Objectiv ...

随机推荐

  1. linux 在终端中打开图形化文件管理器

    虽然终端十分强大,但在少数使用终端的时候,会突然需要图形化文件管理器的帮忙. 命令: xdg-open "dir" 例如 xdg-open ./ 用图形化文件管理器打开当前文件夹 ...

  2. c++实现将表达式转换为逆波兰表达式

    https://github.com/Lanying0/lintcode 所属: 数据结构->线性结构->栈 问题: 给定一个表达式字符串数组,返回该表达式的逆波兰表达式(即去掉括号). ...

  3. C模块回调Lua函数的两种方法

    作者:ani_di 版权所有,转载务必保留此链接 http://blog.csdn.net/ani_di C模块回调Lua函数的两种方法 lua和C通过虚拟栈这种交互方式简单而又可靠,缺点就是C做栈平 ...

  4. Webserver管理系列:9、创password重设盘

    网络时代需要记录password太多.一不留神可能会忘记.是否server的password忘记将是一件非常麻烦的事情. Windows Server 2008 它为我们创造password重设盘功能 ...

  5. sharepoint 自定义字段实现省市联动

    最后实现效果如下:设置栏如下:解决方案结构如下: fldtypes_RoyCustomField.xml 内容如下: <?xml version="1.0" encoding ...

  6. C/C++存储区划分

    一. 在c中分为这几个存储区1.栈 - 由编译器自动分配释放2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化 ...

  7. 创建Xml的将但方法和向Xml中添加数据

    </SendUserId>// ::</DateTime></AcceptUserId>       <AcceptUserId></Accept ...

  8. Servlet url-pattern优先级

    完全匹配>目录匹配>扩展名匹配

  9. JBoss 系列六十九:CDI 基本概念

    概述 如果说EJB,JPA是之前JEE(JEE5及JEE5之前)中里程碑式的规范,那么在JEE6,JEE7中CDI可以与之媲美,CDI(Contexts and Dependency Injectio ...

  10. jquery回调函数callback的使用

    回调函数必须是全局函数或者静态函数,不可定义为某个特定的类的成员函数 callback函数在当前动画100%完成之后执行 $("p").hide(1000); alert(&quo ...