NSNumber

来源:互联网 发布:win7旗舰版优化技巧 编辑:程序博客网 时间:2024/05/07 23:30

基本数据类型:

int、 char、 float和double都不是类, 

具有方法、 成员变量和属性, 以及面向对象的特征。 

为了实现“一切都是对象” 的承诺, 

因此在Foundation框架中使用NSNumber类来封装这些数字类型。 

这样数字就具有了面向对象的基本特征了。


也就是说:如果需要存储基本数据类型(包括char数据类型),可以使用NSNumber类,

它会依据这些数据的类型创建对象。

对于每种基本数据类型,类方法都能为它创建一个NSNumber对象,并设置为指定的值。


NSNumber类构造函数
采用 + numberWithInt: 等“+ number” 开头的类级构造方法,或者使用方法initWithInt,或者使用@表达式, 可以从基本数据类型构建NSNumber对象。 
而使用 –intValue方法可以从NSNumber对象获得基本数据类型。 

这些方法以numberWith开头,紧接着数据的类型,如:numberWithLong:
[objc] view plaincopy在CODE上查看代码片派生到我的代码片
  1. NSNumber *intNumber= [NSNumber numberWithInteger:80];  //NSNumber *intNumber= [[NSNumber alloc] initWithNumber:80];
  2. NSNumber *floatNumber = [NSNumber numberWithFloat:     //NSNumber *intNumber=@100
  3. 80.00];  
  4. int myint = [intNumber intValue];  
  5. float myfloat = [floatNumber floatValue];  

char score  = 'A';NSArray *student = @[@{@"name": @"Jim", @"age":@20, @"height":@175.5, @"weight":@60.5, @"score":@(score)},@{@"name": @"John", @"age":@22, @"height":@179.8, @"weight":@67.2, @"score":@(score)},@{@"name": @"Jack", @"age":@21, @"height":@180.0, @"weight":@70, @"score":@(score)}];  // 可以看出将int,double类型在直接转换就是在前面加@,如果是变量就用()将变量括起来

注意,方法numberWithInt:和numberWithInteger:使用有些差别,遵循以下一些规则:

1)如果使用numberWithInt:方法创建一个整型数,需要使用intValue获取它的值,使用%i作为格式化字符串显示它的值。

2)如果使用numberWithInteger:方法创建一个整型数,需要使用integerValue获取它的值,也可以转换成long显示或使用stringWithFormat:将它格式化为字符串。使用%li作为格式化字符串。


比较两个NSNumber对象大小
可以转化成为基本数据类型比较, 当然可以使用 NSNumber的方法比较, 
这就是对象的优势了, 与比较相关方法有:
isEqualToNumber: 和compare: 。 
isEqualToNumber: 只是比较是否相对, compare: 可以比较大小。
[objc] view plaincopy在CODE上查看代码片派生到我的代码片
  1. if ([intNumber isEqualToNumber: floatNumber] == YES) {  
  2. NSLog(@"相等");  
  3. else {  
  4. NSLog(@"不相等");  
  5. }  
  6. if ([intNumber compare: myNumber] ==  
  7. NSOrderedAscending) {  
  8. NSLog(@"第一个数小于第二个数");  
  9. }  
NSOrderedAscending是枚举类型NSComparisonResult的其中成员, 代表第一个数小于第二个数, 
此外还有NSOrderedSame成员代表第一个数等于第二个数, 
NSOrderedDescending成员代表第一个数大于第二个数。

0 0
原创粉丝点击