NSNumber与NSInteger的区别

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的区别,布布扣,bubuko.com

时间: 2024-10-07 12:36:49

NSNumber与NSInteger的区别的相关文章

Objective-C中int和NSInteger的区别

int是静态类型 NSInteger是动态类型 苹果官方推荐使用NSInteger,因为在苹果的api实现中,NSInteger是一个封装,它会识别当前操作系统的位数,自动返回最大的类型. 定义的代码类似于下: #if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64 typedef long NSInteger; typedef unsigned long N

int、NSInteger、NSUInteger、NSNumber的区别和联系

1.首先先了解下NSNumber类型: NSNumber是NSValue的一个子类,它是一个对象来存储数字值包括bool型,它提供了一系列的方法来存储char a signed or unsigned char, short int, int, long int, long long int, float, or double or as a BOOL,它提供了一个compare:方法来决定两个NSNumber对象的排序: 创建一个NSNumber对象有以下方法: 1 + (NSNumber *

OC NSNumber NSInteger 直接赋值问题

一 问题描述 类对象的属性id类型是NSNumber ,设置UI 的 tag(NSInteger类型)时候,数据失真. id属性是1,tag 取出来为19. 1.1 UI tag 属性 // @property(nonatomic) NSInteger tag; 1.2 错误代码如下 //tagNumber 是 NSNumber 类型 [button setTag:tagNumber]; 1.3 修改代码如下 //通过integerValue方法 中转 [button setTag:[tagNu

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

官方文档地址https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/Reference/Reference.html NSUInteger是无符号的整型, NSInteger是有符号的整型,在表视图应用中常见 NSUInteger row= [indexPath row];因为这是显示tableViewCell有多少个,只能是非零整数的,也就是说

NSNumber简略了解

NSNumber是NSValue的子类,它提供C基本类型的值.char,short等等 1. 创建NSNumber对象的类方法(工厂方法) + (NSNumber *)numberWithBool:(BOOL)value这个value的值时BOOL类型的 + (NSNumber *)numberWithChar:(char)value这个char是带符号的 + (NSNumber *)numberWithDouble:(double)value + (NSNumber *)numberWithF

数值类对象:NSNumber,NSValue,NSNull

基本,集合,复杂,对象 可用对象封装基本数值,然后将对象放入NSArray或NSDictionary 中. 用对象封装基本数值后,即可给其发送消息. 数值类型包括:NSNumber,NSValue,NSNull类. oc不支持自动装箱 NSNumber类 创建方法 + (NSNumber *)numberWithChar:(char)value; + (NSNumber *)numberWithInt:(int)value; + (NSNumber *)numberWithFloat:(floa

NSNumber包装

//1.创建一个数组对象       int.float.char等等C语言的类型无法直接放到OC的数组里面 NSMutableArray *array = [NSMutableArray arrayWithObjects:@"1", @"2", nil]; //2.使用NSNumber对NSInteger类型进行包装 NSNumber *intNumber = [NSNumber numberWithInteger:3]; //3.将包装后的NSNumber对象放

objective-c 中数据类型之五 数值类(NSNumber及NSNumberFormatter)

// 聊聊NSNumber, NSNumber可以封装c中基本数据类型 char,int,long,float,BOOL,NSInteger,CGFloat等. NSNumber *num = [NSNumber numberWithChar:'a']; NSLog(@"%@", num); // 97 num = [NSNumber numberWithInteger:97]; num = [NSNumber numberWithFloat:97.0]; num = [NSNumbe

Objective-C基础夯实篇——NSValue&NSNumber(装箱和拆箱)

概述 NSNumber和NSValue都是用来做装箱用的,把基本类型的数据装成对象.官方文档给的资料说明地很清楚: /* NSValue.h Copyright (c) 1994-2014, Apple Inc. All rights reserved. */ #import <Foundation/NSObject.h> @class NSString, NSDictionary; @interface NSValue : NSObject <NSCopying, NSSecureCo