oc_NSInteger 和 NSNumber

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

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

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

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

谈到“类”,总是给人以抽象的感觉。像 NSNumber 这个类型,从字面上看,它属于char、int、long、double中的哪一种呢?其实,NSNumber 可以隶属其中的任意一种类型。既然 NSNumber 是类,就应该遵循“类”的规则。通过类方法来创建、初始化一个类的对象。

NSNumber 所拥有的类方法,如下:
1 + (NSNumber*)numberWithChar: (char)value;
2 + (NSNumber*)numberWithInt: (int)value;
3 + (NSNumber*)numberWithFloat: (float)value;
4 + (NSNumber*)numberWithBool: (BOOL) value;
例如:
1 NSNumber *myNumber, *floatnumber, *intNumber, *doublenumber, *charNumber; //定义各种类型
2 myNumber = [NSNumber numberWithLong:0xabcdef];  //分别赋值
3 floatnumber = [NSNumber numberWithFloat:12.33];
4 intNumber = [NSNumber numberWithInt:100];
5 doublenumber = [NSNumber numberWithDouble:12345e+15];
6 charNumber = [NSNumber numberWithChar:‘X‘];
将基本类型数据封装到NSNumber中后,就可以通过下面的实例方法重新获取它:
1 - (char) charValue;
2 - (int) intValue;
3 - (float) floatValue;
4 - (BOOL) boolValue;
5 - (NSString*) stringValue;


1 //获取对象的各种类型的值:
2 myInt = [intNumber intValue];
3 myInt = [floatnumber floatValue];
4 myInt = [doublenumber doubleValue];
5 myInt = [charNumber charValue];
有了以上概念,以下code 编译是否有误?
1 NSMutableArray *myArray = [[NSMutableArray alloc] init ];
2 [myArray addObject: 6];
这样是会引发编译错误的,因为NSMutableArray中所要存放的是一个对象,但‘6’不是。这怎么办呢? 需要用到 NSNumber。
1 NSMutableArray *myArray = [[NSMutableArray alloc] init ];
2 [myArray addObject: [NSNumber numberWithInt:6]];
3 NSLog(@"array content is %@", myArray);
时间: 2024-11-08 21:09:10

oc_NSInteger 和 NSNumber的相关文章

OC学习篇之---Foundation框架中的其他类(NSNumber,NSDate,NSExcetion)

1.NSNumber 这个类主要是用来封装基本类型的,说到这里,就不得不说一下了: OC中的集合是不允许存入基本类型的,所以NSNumber类就诞生了,需要将基本类型封装一下,然后存进去,这个类似于Java中的自动装箱和拆箱,Java中的集合其实也是不允许存入基本类型的,但是我们任然看可以那么操作,就是因为有自动装箱功能,如果你将Eclipse的JDK改成5.0之前的,你看看还能操作吗.. 注:那为什么基本类型不能存入到集合中呢? 原因是在操作集合的时候会操作集合元素中的方法,但是基本类型是没有

NSNumber的使用

NSNumber可以将基本数据类型包装成对象,这样就可以间接将基本数据类型存进NSArray.NSDictionary等集合中, 但是它不能包装结构体. 常见的初始化方法: + (NSNumber *)numberWithChar:(char)value + (NSNumber *)numberWithInt:(int)value + (NSNumber *)numberWithFloat:(float)value + (NSNumber *)numberWithBool:(BOOL)value

Xcode4.4(LLVM4.0编译器)中NSArray, NSDictionary, NSNumber优化写法

Xcode4.4(LLVM4.0编译器)中NSArray, NSDictionary, NSNumber优化写法 从xcode4.4开始,LLVM4.0编译器为Objective-C添加一些新的特性.创建数组NSArray,字典NSDictionary, 数值对象NSNumber时,可以像NSString的初始化一样简单方便.妈妈再也不担心程序写得手发酸了. A.   NSArray 首先是非常常用的NSArray,NSMutableArray.NSArray是一个初始化后就固定的静态数组.如果

【非凡程序员】 OC第六节课 (枚举,字典,结构体,NSRange,CG类型,NSnumber,空)

#import <Foundation/Foundation.h>#import "Article.h"#import "Person.h" int main(int argc, const char * argv[]) {    @autoreleasepool { //自动释放池 (半自动) //-------------------------枚举类---------------------------------//     NSArray *p

oc的包装类 NSValue NSNumber

我们都知道oc是面向对象的,但是oc是由c语言扩展而来的,c语言中的int 等类型都不是对象,那么oc 是如何拥有“对象”特征的呢? oc提供了NSValue 和 NSNumber 来封装c语言的基本类型,这样就具有来面向对象的特征了... NSValue是NSNumber的父类. NSValue代表更通用的包装类,可以包装 short int float char 对象id 指针  通过对这些的包装就可以添加到NSArray等集合中了: NSNumber代表更具体的包装类,主要有三个方法:(x

NSValue NSNumber NSData类

NSValue NSNumber NSData类 步骤1 NSValue 我们先看看NSValue能做什么: 一个NSValue对象是用来存储一个C或者Objective-C数据的简单容器.它可以保存任意类型的数据,比如 int,float,char,当然也可以是指pointer, structure, and object id.NSValue类的目标就是允许以上数据类型的数据结构能够被添加到集合里,例如那些需要其元素是对象的数据结构,如NSArray或者NSSet 的实例.需要注意的是NSV

数值类对象:NSNumber,NSValue,NSNull

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

NSNumber和Int之间的转换

int 转 NSNumber: [NSNumber numberWithInt:(int)]; NSNumber 转 int [(NSNumber) intValue]; 其他数据类型类似 有些数组只能存Object对象,所以需要将普通数据类型转换成为Object型. NSNumber和Int之间的转换,布布扣,bubuko.com

NSNumber与NSInteger的区别

Objective-C 支持的类型有两种:基本类型 和  类. 基本类型,如同C 语言中的 int 类型一样,拿来就可以直接用. 而类在使用时,必须先创建一个对象,再为对象分配空间,接着做初始化和赋值. 类的初始化,需用类自身的方法 (类方法). 代码中所创建的对象,不用后,还得记着释放. 做了这么多铺垫, 具体到 NSNumber 和 NSInteger ,又怎样呢? NSNumber 是类, 而 NSInteger 只不过是个 基本类型. 既然 NSInteger是基本类型,那么,使用起来就