轉自:http://leopard168.blog.163.com/blog/static/168471844201381793246514/
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 編譯是否有誤?
NSArray*array=[[NSArray alloc]init];[array addObject:6];
這樣是會引發編譯錯誤的,因為NSArray中所要存放的是一個對象,但‘6’不是。這怎么辦呢? 需要用到 NSNumber。
NSArray*array=[[NSArray alloc]init];[array addObject:[NSNumber numberWithInt:6]];
更多iOS技術交流,歡迎加入 “iOS之美” QQ群號:238303969