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编译器的发布,让我们欣喜的是NSNumber,NSArray和NSDictionary常量被添加了。
@"":返回一个由引号内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*返回NSString,int返回NSNumber,等等。)。这也是使用数字常量和枚举值的指定方式。
浙公网安备 33010602011771号