15、OC 包装类(NSNumber、NSValue)

来源:互联网 发布:婚礼布置设计软件 编辑:程序博客网 时间:2024/06/01 08:07
     在讲解包装类之前,我们首先看这几个类型:NSInteger、NSUInteger、CGFloat,这几个类型并不是包装类,而是基本类型,NSInteger和NSUInteger在64位和各种类似64位的各种平台上表现为long和unsigned long,而在32位上表现为int型。CGFloat在64位平台上相当于double,而在32位平台上相当于float。
     NSValue和NSNumber都是包装类,NSValue用于包装单个short、int、long、float、char、指针、id等数据类型,通常NSArray、NSSet、NSDictionary等集合、字典要求它们的元素必须是对象,而NSValue很好的包装了这些基本数据类型。NSNumber主要用于包装C语言的各种基本数据类型,NSNumber主要有以下几类方法:
     +numberWithxxx: 这是个类方法,可以将基本类型直接包装成NSNumber。
     -initWithxxx: 该实例方法首先需要创建一个NSNumber对象,再使用一个基本数据类型的值来初始化。
     -xxxValue:该实例方法返回该NSNumber对象包装的基本类型的值。
     xxx代表bool,char,double,float,int,Integer,long,long long,short,unsigned int,unsignedInteger,unsigned long,unsigned long long,unsigned short中的一种。
 OC允许自动装箱机制,但是自动装箱不支持ARC,所以在开启ARC时会报错
#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) {    @autoreleasepool {        //使用类方法创建        NSNumber* pai = [NSNumber numberWithDouble:3.1415];        NSLog(@"%@",pai);               //NSNumber是一个类簇,使用同一个类名,创建不同对象        NSNumber *intNumber = [[NSNumber alloc]initWithInt:10];        NSNumber *floatNumber = [[NSNumber alloc]initWithFloat:3.14f];        NSNumber *doubleNumber = [[NSNumber alloc]initWithDouble:10];        NSNumber *charNumber = [[NSNumber alloc]initWithChar:'A'];               //比较大小        BOOL ret = [intNumber isEqualToNumber:doubleNumber];        NSLog(@"%d",ret);               if([intNumber compare:floatNumber]==NSOrderedAscending){            NSLog(@"<");        }else if([intNumber compare:floatNumber]==NSOrderedSame){            NSLog(@"=");        }else if([intNumber compare:floatNumber]==NSOrderedDescending){            NSLog(@">");        }               //还原基本数据类型数据        NSLog(@"%d",[intNumber intValue]);        NSLog(@"%f",[floatNumber floatValue]);        NSLog(@"%f",[doubleNumber doubleValue]);        NSLog(@"%c",[charNumber charValue]);               //OC允许自动装箱机制,但是自动装箱不支持ARC,所以在开启ARC时会报错        //NSNumber* i1 = 10;    }    return 0;}



0 0