您好,登錄后才能下訂單哦!
在Objective-C中,我們可以使用c中的數(shù)字?jǐn)?shù)據(jù)類型,int、float、long等。它們都是基本數(shù)據(jù)類型,而不是對(duì)象。也就是說(shuō),不能夠向它們發(fā)送消息。然后,有些時(shí)候需要將這些值作為對(duì)象使用。
NSInteger、NSUInteger
當(dāng)你不知道程序運(yùn)行哪種處理器架構(gòu)時(shí),你最好使用NSInteger,因?yàn)樵谟锌赡躨nt在32位系統(tǒng)中只是int類型,而在64位系統(tǒng),int可能變是long型。除非不得不使用int/long型,否則推薦使用NSInteger。
從上面的定義可以看出NSInteger/NSUInteger是一種動(dòng)態(tài)定義的類型,在不同的設(shè)備,不同的架構(gòu),有可能是int類型,有可能是long類型。NSUInteger是無(wú)符號(hào)的,即沒(méi)有負(fù)數(shù),NSInteger是有符號(hào)的。
NSNumber
有人說(shuō)既然都有了NSInteger等這些基礎(chǔ)類型了為什么還要有NSNumber?
NSNumber可以將基本數(shù)據(jù)類型包裝起來(lái),形成一個(gè)對(duì)象,這樣就可以給其發(fā)送消息,裝入NSArray中等。
NSInteger intVal = 123; NSNumber *numberVal = [NSNumber numberWithInteger:intVal]; NSMutableArray* array = [NSMutableArray array]; [array addObject:intVal]; //錯(cuò)誤,intVal不是一個(gè)對(duì)象類型 [array addObject:numberVal]; //正確
Cocoa提供了NSNumber類來(lái)包裝(即以對(duì)象形式實(shí)現(xiàn))基本數(shù)據(jù)類型。
+ (NSNumber*)numberWithChar: (char)value;+ (NSNumber*)numberWithInt: (int)value;+ (NSNumber*)numberWithDouble:(double)value;+ (NSNumber*)numberWithFloat: (float)value;+ (NSNumber*)numberWithBool: (BOOL) value;...
將基本類型數(shù)據(jù)封裝到NSNumber中后,就可以通過(guò)下面的實(shí)例方法重新獲取它:
- (char)charValue;- (int)intValue;- (float)floatValue;- (double)doubleValue;- (BOOL)boolValue;...
NSValue類
但是我們往往也會(huì)有這樣的需求,例如需要將CGPoint 或是CGRect這樣的結(jié)構(gòu)存儲(chǔ)在集合中.一個(gè)NSValue對(duì)象是用來(lái)存儲(chǔ)一個(gè)C或者Objective-C數(shù)據(jù)的簡(jiǎn)單容器。它可以保存任意類型的數(shù) 據(jù),比如int,float,char,當(dāng)然也可以是指pointers, structures, and object ids。NSValue類的目標(biāo)就是允許以上數(shù)據(jù)類型的數(shù)據(jù)結(jié)構(gòu)能夠被添加到集合里.這種結(jié)構(gòu)轉(zhuǎn)化為對(duì)象的方式,不就是java中的裝箱(boxing) 嗎?不過(guò)在Objective-C中稱為包裝(wraping),相反的,從對(duì)象中解出基本類型,稱為展開(kāi)(unwraping),在java中叫拆箱 (unboxing).
NSNumber 繼承自NSObject,可使用compare、isEqual等消息。
NSNumber是NSValue的子類。NSValue可包裝任意類型值。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。