NSNumber與NSInteger的區別


轉自: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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM