NSInteger,NSNumber以及Int的區(qū)別

NSInteger和NSNumber

首先:NSInteger,NSNumber并沒有什么關(guān)系,更不要想當然的以為二者還有什么繼承關(guān)系,甚至還有人問NSInteger是不是NSNumber的子類?答案當然是NO!!!NSInteger只是一個基本的數(shù)據(jù)類型,而NSNumber是OC的對象,并且NSNumber繼承自NSValue,NSValue又繼承自NSObject.

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

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.34];

intNumber = [NSNumber numberWithInt:1000];

doublenumber = [NSNumber numberWithDouble:12345e+15];

charNumber = [NSNumber numberWithChar:'X'];

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

- (char)charValue;

- (int)intValue;

- (float)floatValue;

- (BOOL)boolValue;

- (NSString*)stringValue;

myInt = [intNumber intValue]; //獲取對象的整型值

//[floatnumber floatValue];

//[doublenumber doubleValue];

//[charNumber charValue];


關(guān)于NSInteger 和Int:

查到c語言中,int和long的字節(jié)數(shù)是和操作系統(tǒng)指針所占位數(shù)相等。

但c語言中說,long的長度永遠大于或等于int

objective-c里,蘋果的官方文檔中總是推薦用NSInteger

它和int有什么區(qū)別呢,stackoverflow這幫大神給了答案。

NSInteger是一個封裝,它會識別當前操作系統(tǒng)的位數(shù),自動返回最大的類型。當你不知道你的操作系統(tǒng)是什么類型的時候,你通常會想要使用NSInteger,所以或許你想要你的int類型范圍盡可能的大,用NSInteger,32位系統(tǒng)NSInteger是一個int,即32位,但當時64位系統(tǒng)時,NSInteger便是64位的?!跃褪且话阃扑]用NSInteger的

定義的代碼類似于下:

#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64

typedef long?NSInteger;

typedef unsigned long?NSUInteger;

#else

typedef int?NSInteger;

typedef unsigned int?NSUInteger;

#endif

You usually want to use NSInteger when you don't know what kind of processor architecture your code might run on, so you may for some reason want the largest possible int type, which on 32 bit systems is just an int, while on a 64-bit system it's a long.

總結(jié):NSInteger與int的區(qū)別是NSInteger會根據(jù)系統(tǒng)的位數(shù)(32or64)自動選擇int的最大數(shù)值(int or long)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • NSInteger和NSNumber 首先:NSInteger,NSNumber并沒有什么關(guān)系,更不要想當然的以為...
    LIANMING_LI閱讀 990評論 0 0
  • Object-c的類可以多重繼承么?可以實現(xiàn)多個接口么?Category是什么?重寫一個類的方式用繼承好還是分類好...
    small_Sun閱讀 779評論 0 0
  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,032評論 0 9
  • 在編程的過程中,一些基本數(shù)據(jù)類型的變量是必不可少的。但是在OC編程語言當中,OC的消息機制并不能向這些基本數(shù)據(jù)類型...
    趙亦晨閱讀 461評論 0 0
  • iOS面試題及答案 1. Object-c的類可以多重繼承么?可以實現(xiàn)多個接口么?Category是什么?重寫一...
    iOS_阿輝閱讀 1,966評論 0 32

友情鏈接更多精彩內(nèi)容