NSNumber
- NSNumber 是一個(gè)類(lèi)贾陷。OC中提供了NSNumber類(lèi)來(lái)將基本數(shù)據(jù)類(lèi)型“包裝”成數(shù)字對(duì)象队橙,這樣我們就可以將基本數(shù)據(jù)類(lèi)型當(dāng)做對(duì)象來(lái)處理候味。同樣也可以將包裝后的對(duì)象還原成基本數(shù)據(jù)類(lèi)型抒寂。
NSNumber的類(lèi)方法
+ (NSNumber *)numberWithChar:(char)value;
+ (NSNumber *)numberWithUnsignedChar:(unsigned char)value;
+ (NSNumber *)numberWithShort:(short)value;
+ (NSNumber *)numberWithUnsignedShort:(unsigned short)value;
+ (NSNumber *)numberWithInt:(int)value;
+ (NSNumber *)numberWithUnsignedInt:(unsigned int)value;
+ (NSNumber *)numberWithLong:(long)value;
+ (NSNumber *)numberWithUnsignedLong:(unsigned long)value;
+ (NSNumber *)numberWithLongLong:(long long)value;
+ (NSNumber *)numberWithUnsignedLongLong:(unsigned long long)value;
+ (NSNumber *)numberWithFloat:(float)value;
+ (NSNumber *)numberWithDouble:(double)value;
+ (NSNumber *)numberWithBool:(BOOL)value;
+ (NSNumber *)numberWithInteger:(NSInteger)value NS_AVAILABLE(10_5, 2_0);
+ (NSNumber *)numberWithUnsignedInteger:(NSUInteger)value NS_AVAILABLE(10_5, 2_0);
NSNumber的實(shí)例方法
//實(shí)例方法 初始化
- (NSNumber *)initWithChar:(char)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithUnsignedChar:(unsigned char)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithShort:(short)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithUnsignedShort:(unsigned short)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithInt:(int)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithUnsignedInt:(unsigned int)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithLong:(long)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithUnsignedLong:(unsigned long)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithLongLong:(long long)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithUnsignedLongLong:(unsigned long long)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithFloat:(float)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithDouble:(double)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithBool:(BOOL)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithInteger:(NSInteger)value NS_AVAILABLE(10_5, 2_0) NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithUnsignedInteger:(NSUInteger)value NS_AVAILABLE(10_5, 2_0) NS_DESIGNATED_INITIALIZER;
- 使用 @(someThing);// 快速裝箱,自動(dòng)判斷類(lèi)型。
NSNumber *number = @(1);
將基本類(lèi)型數(shù)據(jù)封裝到NSNumber中后衔掸,通過(guò)下面的實(shí)例方法重新獲取它
NSNumber *myNumber = [NSNumber numberWithLong:0xabcdef];
NSNumber *floatnumber = [NSNumber numberWithFloat:12.33];
NSNumber *intNumber = [NSNumber numberWithInt:100];
NSNumber *doublenumber = [NSNumber numberWithDouble:12345e+15];
NSNumber *charNumber = [NSNumber numberWithChar:'X'];
int myInt = [intNumber intValue];
float myFloat = [floatnumber floatValue];
double myDouble = [doublenumber doubleValue];
char myChar = [charNumber charValue]烫幕;
- 因?yàn)镺C的集合當(dāng)中存儲(chǔ)的數(shù)據(jù)必須是OC對(duì)象俺抽。舉個(gè)例子
NSMutableArray *myArray = [[NSMutableArray alloc] init ];
[myArray addObject: 6 ];
上面的寫(xiě)法編譯器會(huì)報(bào)錯(cuò)敞映。解決方法就是把'6'包裝成一個(gè)NSNumber對(duì)象。
NSMutableArray *myArray = [[NSMutableArray alloc] init ];
[myArray addObject:[NSNumber numberWithInt:6] ];
NSLog(@"array content is %@", myArray);
- NSNumber轉(zhuǎn)成NSString類(lèi)型
// 下面 A是NSNumber類(lèi)型 B是NSString類(lèi)型
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
B = [numberFormatter stringFromNumber:A];
- 用NSNumber排序
NSNumber *number1 = [NSNumber numberWithInteger:13];
NSNumber *number2 = [NSNumber numberWithInteger:14];
NSComparisonResult result = [number1 compare:number2];
if (result == NSOrderedAscending) {
NSLog(@"升序");//number2 比 number1 大
}else if (result == NSOrderedSame){
NSLog(@"一致");
}else if (result == NSOrderedDescending){
NSLog(@"降序");
}else{
NSLog(@"error");
}
- 用NSNumber判斷是否一致
NSNumber *number1 = [NSNumber numberWithInteger:13];
NSNumber *number2 = [NSNumber numberWithInteger:14];
if ([number1 isEqualToNumber:number2]) {
NSLog(@"same");
}else{
NSLog(@"nonono");
}
int磷斧、NSInteger振愿、NSUInteger、NSNumber之間的區(qū)別和聯(lián)系
- int : 當(dāng)使用int類(lèi)型定義變量的時(shí)候弛饭,可以像寫(xiě)C程序一樣去使用冕末。當(dāng)你不知道程序運(yùn)行在哪種處理器架構(gòu)時(shí),你最好使用NSInteger侣颂,因?yàn)樵谟锌赡躨nt在32位系統(tǒng)中只是int類(lèi)型档桃,而在64位系統(tǒng),int可能變成long型憔晒。除非不得不使用int/long型藻肄,否則推薦使用NSInteger。
- NSInteger/NSUInteger是一種動(dòng)態(tài)定義的類(lèi)型拒担,在不同的設(shè)備嘹屯,不同的架構(gòu),有可能是int類(lèi)型从撼,有可能是long類(lèi)型州弟。NSUInteger是無(wú)符號(hào)的,即沒(méi)有負(fù)數(shù)低零,NSInteger是有符號(hào)的婆翔。
- NSInteger是基礎(chǔ)類(lèi)型,NSNumber是一個(gè)類(lèi)掏婶,如果需要存儲(chǔ)一個(gè)數(shù)值啃奴,直接使用NSInteger是不行的,因?yàn)镺C的集合當(dāng)中存儲(chǔ)的數(shù)據(jù)必須是OC對(duì)象气堕。