Objective-C可以开发apple家族系列产品的软件,这里记录成笔记方便日后复习:
- Objective-c学习笔记01——简介
- Objective-c学习笔记02——类(面向对象)
- Objective-c学习笔记03——内存管理
- Objective-c学习笔记04——NSString
- Objective-c学习笔记05——NSArray(NSMutableArray)
- Objective-c学习笔记06——字典与集合
- Objective-c学习笔记07——异常处理(try catch)
- Objective-c学习笔记08——NSNumber
我们都知道Objective-c常常用到消息机制,而 int型、float型、long型都是Objective-c中的基本数据类型,是无法接收到消息的,所以在这个时候就引入了NSNumber这个类,我们可以使用NSNumber对象来创建和初始化不同类型的数字对象
一、NSNumber基本使用
- //声明对象与变量
- NSNumber *myNumber, *floatNumber, *intNumber;
- NSInteger myInt;
- //integer 型
- intNumber = [NSNumber numberWithInteger:100];
- int i = intNumber.intValue;
- NSLog(@"numberWithInteger:%i", i);
- // long型
- myNumber = [NSNumber numberWithLong:0xabcdef];
- NSLog(@"numberWithLong:%li", myNumber.longValue);
- // char 型
- myNumber = [NSNumber numberWithChar:'A'];
- NSLog(@"numberWithChar:%d", myNumber.charValue);
- // float 型
- myNumber = [NSNumber numberWithFloat:0.333];
- NSLog(@"numberWithFloat:%f", myNumber.floatValue);
- // double 型
- myNumber = [NSNumber numberWithDouble:23.84888];
- NSLog(@"numberWithDouble:%f", myNumber.doubleValue);
注:上面从NSNumber对象中获取值必须要和存储到NSNumber对象里面的数值类型一致.
NSLog输出:
2013-09-03 11:02:14.488 Objective-c--NSNumber[10507:303] numberWithInteger:100 2013-09-03 11:02:14.491 Objective-c--NSNumber[10507:303] numberWithLong:11259375 2013-09-03 11:02:14.492 Objective-c--NSNumber[10507:303] numberWithChar:65 2013-09-03 11:02:14.493 Objective-c--NSNumber[10507:303] numberWithFloat:0.333000 2013-09-03 11:02:14.493 Objective-c--NSNumber[10507:303] numberWithDouble:23.848880 Program ended with exit code: 0
当然,现在Objective-c已经引入了ARC自动引用计数,可以方便的自动处理内存,所以我们也可以方便的使用初始化实例方法:
intWithChar: intWithShort: intWithInt: intWithLong intWithFloat: ......
二、NSNumber常用方法
- NSNumber *number1 = [NSNumber numberWithFloat:3.14];
- NSNumber *number2 = [NSNumber numberWithInt:10];
- //比较两个数是否相等
- if ([number1 isEqualToNumber:number2]) {
- NSLog(@"number1 equal number2");
- }else {
- NSLog(@"numbers are not equal");
- }
- // 验证一个Number是否小于、等于或大于另一个Number
- if ([number1 compare:number2] == NSOrderedAscending) {
- NSLog(@"First number is less than second");
- }
isEqualToNumber:比较两个NSNumber对象的数值,程序会返回BOOL值查看这两个值是否相等.
compure: 测试一个值是否在数值上小于、等于或者大于另外一个值,当number1小于number2的时候返回NSOrderedAscending,但两个值相等这返回NSOrderdSame,如果number2大于number1则返回NSOrderedDescending。
2013-11-03 11:24:43.058 Objective-c--NSNumber[10617:303] numbers are not equal 2013-11-03 11:24:43.059 Objective-c--NSNumber[10617:303] First number is less than second Program ended with exit code: 0
下面列举除了Api文档中对NSNumber的创建等方法,也可以查看一下NSDecimalNumber类的相关文档,它是NSNumber的子类,在对象层面上提供了一些数值的四则运算.
创建NSNumber对象 + numberWithBool: + numberWithChar: + numberWithDouble: + numberWithFloat: + numberWithInt: + numberWithInteger: + numberWithLong: + numberWithLongLong: + numberWithShort: + numberWithUnsignedChar: + numberWithUnsignedInt: + numberWithUnsignedInteger: + numberWithUnsignedLong: + numberWithUnsignedLongLong: + numberWithUnsignedShort: 初始化NSNumber对象 – initWithBool: – initWithChar: – initWithDouble: – initWithFloat: – initWithInt: – initWithInteger: – initWithLong: – initWithLongLong: – initWithShort: – initWithUnsignedChar: – initWithUnsignedInt: – initWithUnsignedInteger: – initWithUnsignedLong: – initWithUnsignedLongLong: – initWithUnsignedShort: 访问数字值 – boolValue – charValue – decimalValue – doubleValue – floatValue – intValue – integerValue – longLongValue – longValue – shortValue – unsignedCharValue – unsignedIntegerValue – unsignedIntValue – unsignedLongLongValue – unsignedLongValue – unsignedShortValue 检索字符串表示形式 – descriptionWithLocale: – stringValue 比较NSNumber对象 – compare: – isEqualToNumber: 访问类型信息 – objCType