NSNumber與NSInteger的區別

Objective-C 支持的類型有兩種:基本類型 和 類。

基本類型,如同C 語言中的 int 類型一樣,拿來就可以直接用。 而類在使用時,必須先創建一個對象,再爲對象分配空間,接着做初始化和賦值。 類的初始化,需用類自身的方法 (類方法)。 代碼中所創建的對象,不用後,還得記着釋放。

做了這麼多鋪墊, 具體到 NSNumber 和 NSInteger ,又怎樣呢?

NSNumber 是類, 而 NSInteger 只不過是個 基本類型。

既然 NSInteger是基本類型,那麼,使用起來就非常簡單。 聲明一個變量, NSInteger myInt; 直接賦值就可以了。 比如: myInt=8;

談到“類”,總是給人以抽象的感覺。像NSNumber 這個類型,從字面上看,它屬於char、int、long、double 中的哪一種呢? 其實,NSNumber 可以隸屬其中的任意一種類型。 這就是“類”的強大 —— 抽象,而且內嵌多種方法(method)。

既然NSNumber 是類,就應該遵循“類”的規則。 通過類方法來創建、初始化一個類的對象。

NSNumber 所擁有的類方法,如下:

+ (NSNumber*)numberWithChar: (char)value;

+ (NSNumber*)numberWithInt: (int)value;

+ (NSNumber*)numberWithFloat: (float)value;

+ (NSNumber*)numberWithBool: (BOOL) value;

NSNumber *myNumber,*floatnumber,*intNumber,*doublenumber,*charNumber;

myNumber = [NSNumber numberWithLong:0xabcdef];
floatnumber = [NSNumber numberWithFloat:12.33];
intNumber = [NSNumber numberWithInt:100];
doublenumber = [NSNumber numberWithDouble:12345e+15];
charNumber = [NSNumber numberWithChar:'X'];

將基本類型數據封裝到NSNumber中後,就可以通過下面的實例方法重新獲取它:

- (char)charValue;

- (int)intValue;

- (float)floatValue;

- (BOOL)boolValue;

- (NSString*)stringValue;

myInt = [intNumber intValue]; //獲取對象的整型值
//[floatnumber floatValue];
//[doublenumber doubleValue];
//[charNumber charValue];

有了以上概念,我們來考一個面試題。 以下code 編譯是否有誤?

NSMutableArray *myArray = [[NSMutableArray alloc] init ];

[myArray addObject: 6 ];

這樣是會引發編譯錯誤的,因爲NSMutableArray中所要存放的是一個對象,但‘6’不是。這怎麼辦呢? 需要用到 NSNumber。
NSMutableArray *myArray = [[NSMutableArray alloc] init ];

[myArray addObject: [NSNumber numberWithInt:6] ];

NSLog(@"array content is %@", myArray);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章