NSNumber
引入:
基本數據類型變爲對象
例如使用基本數據類型:NSInteger a = 9;但是有時候使用基本數據類型是不方便的,比如說需要將基本類型變量裝到數組裏,但數組裏裝的都是對象的地址。或者放入字典中也不可行。
所以需要將基本數據類型變爲對象,讓我們能夠裝入數組或者字典當中,讓我們能夠給他們發送消息,即調用方法,如排序。
專門用來裝基礎數據類型的對象類NSNumber
NSNumber的對象可以是各種各樣數字的內容。比如:
NSNumber * intNumber = [[NSNumber alloc] initWithInt:5]; // 整型
NSNumber * floatNumber = [[NSNumber alloc] initWithFloat:3.14f]; // 浮點型
NSNumber * doubleNumber = [[NSNumber alloc] initWithDouble:3.14]; // 雙精度浮點型
NSNumber * charNumber = [[NSNumber alloc] initWithChar:'A']; // 字符型
等等……
注意:上面這幾個對象是不同的對象。
NSNumber是一個類簇
有一些類聚合在一起形成了一些類簇,從表面上看來是一個類,實際上,它可以創建各種類的對象。可以通過NSNumber調用不同的初始化方法創造出不同的對象。
一個super類,一個與衆不同的類,一個超級的類。
NSNumber和UIButton都是典型的類簇,雖然使用同一個類名,但是可以創建不同的對象。
舉例:貓狗和動物。
NSNumber比較方法
NSNumber * intNumber1 = [[NSNumber alloc] initWithInt:5];NSNumber * intNumber2 = [[NSNumber alloc] initWithInt:6];
BOOL ret = [intNumber1 isEqualToNumber:intNumber2]; // 比較是否相等。
BOOL ret = [intNumber1 isEqualToNumber:charNumber];
// 比較是否相等(不同類型的對象也可以作比較)
除了比較是否相等之外,兩個NSNumber對象也可以像普通的基本變量一樣去比較它們的大小關係:
if([intNumber1 compare:intNumber2] == NSOrderedAscending){
NSLog(@"intNumber1 < intNumber2");
}else if([intNumber1 compare:intNumber2] == NSOrderedSame) {
NSLog(@"intNumber1 == intNumber2");
}else if([intNumber1 compare:intNumber2] == NSOrderedDescending) {
NSLog(@"intNumber1 > intNumber2");
}
獲得原始的基本類型的數據
既然把基本的數據存到了對象當中,如果想獲得原始的基本類型的數據:調用intNumber對象的intValue方法。
如:
NSLog(@"%d", [intNumber intValue]);
NSLog(@"%f", [floatNumber floatValue]);
NSLog(@"%f", [doubleNumber doubleValue]);
NSLog(@"%c", [charNumber charValue]);
更簡潔的理解和使用方法
// 自動創建NSNumber對象,只要在數字前加一個@,
編譯器將會識別出它是何種類型的數字(double,float,character,boolean等)
NSNumber * number = @123;// 獲取對象的值
int value = [number intValue];