NSNumber

NSNumber主要针对于基本数据类型的包装

有时我们会需要把基本数据类型转换成对象来处理,比如,把基本类型放入到集合中(cocoa中集合只能存放对象,无法存放基本数据类型),OC中提供了数字对象“NSNumber”可以将基本数据类型“包装”成对象。NSNumber的父类是NSValue。

1. 数字对象的初始化

//类方法创建数字对象,不需要内存管理
int number = 10;
NSNumber *intNumber = [NSNumber numberWithInt:number];
BOOL isBool = YES;
NSNumber *boolNumber = [NSNumber numberWithBool:isBool];
//实例方法创建数字对象,需要内存管理
float pi = 3.14;
NSNumber *piNumber = [[NSNumber alloc] initWithFloat:pi];
char character = 'a';
NSNumber *cNumber = [[NSNumber alloc] initWithChar:character];

2. 数字对象的转换

//还原成基本数据类型
int month = [intNumber intvalue];
Bool isOpen = [boolNumer boolValue];
float length = [piNumber floatValue];
char firstName = [cNumber charValue];

 

判断两个NSNumber是否相等

1 BOOL ret = [intNumber isEqualToNumber:intNumber2]; //这种比较也是可以跨不同对象的,比如:比较intNumber和floatNumber

 

比较两个整型的NSNumber的大小

 //比较两个整型的NSNumber的大小
 if ([intNumber compare:intNumber] == NSOrderedAscending) {
     NSLog(@"<");
 }else if([intNumber compare:intNumber2] == NSOrderedSame){
     NSLog(@"=");
 }else if([intNumber compare:intNumber2] == NSOrderedDescending){
     NSLog(@">");
 }

 

 不久前,Objective-C只有 NSString 常量。但随着Apple的LLVM 4.0编译器的发布,让我们欣喜的是NSNumberNSArrayNSDictionary常量被添加了。

  • @"":返回一个由引号内Unicode内容初始化的NSString对象。
  • @42@3.14@YES@'Z':返回一个由相关类构造初始化的NSNumber对象,比如@42[NSNumber numberWithInteger:42],或者@YES[NSNumber numberWithBool:YES]。支持使用后缀进一步指定类型,如@42U[NSNumber numberWithUnsignedInt:42U]
  • @[]:返回一个由冒号分隔的对象列表作为内容的NSArray对象。比如,@[@"A", @NO, @2.718][NSArray arrayWithObjects:@"A", @NO, @2.718, nil] (注意在数组常量中结束标记nil是不需要的)。
  • @{}:返回一个由特定键-值对初始化作为内容的NSDictionary对象,格式:@{@"someKey" : @"theValue"}
  • @():动态评估封装的表达,并返回基于其值的合适的对象常量(比如,const char*返回NSStringint返回NSNumber,等等。)。这也是使用数字常量和枚举值的指定方式。
posted on 2015-07-22 11:40  pTrack  阅读(162)  评论(0)    收藏  举报