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);
基本類型,如同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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.