iOS開發之int,NSInteger,NSUInteger,NSNumber的使用

來源:互聯網
上載者:User

轉自:http://chensmiles.blog.163.com/blog/static/121463991201296101228806/


If you’ve ever found yourself scratching your head thinking “now which one should I be using, NSNumber or NSInteger?” the short summary below should help.

NSInteger is nothing more than a synonym for a long integer. What follows is how NSInteger is defined:

1 2 3 4 5 6 7 
#if __LP64__ || NS_BUILD_32_LIKE_64   typedef long NSInteger;   typedef unsigned long NSUInteger; #else   typedef int NSInteger;   typedef unsigned int NSUInteger; #endif

NSNumber is an Objective-C class, a subclass of NSValue to be specific. You can create an NSNumber object from a signed or unsigned char, short int, int, long int, long long int, float, double or BOOL.

One of the primary distinctions is that you can use NSNumber in collections, such as NSArray, where an object is required. For example, if you need to add a float into an NSArray, you would first need to create an NSNumber object
from the float:

1 2 3 4 
float percentage = 40.5; ... // Create NSNumber object, which can now be inserted into an NSArray NSNumber *percentageObject = [NSNumber numberWithFloat:percentage];

NSInteger is a simply an integer, NSNumber is an object.

以上轉至:http://mobiledevelopertips.com/cocoa/nsnumber-and-nsinteger.html

附錄:

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

typedef long NSInteger;

#else

typedef int NSInteger;

#endif

這篇介紹幾種變數類型的區別和注意點,雖然簡單.但比較實用.

1、當需要使用int類型的變數的時候,可以像寫C的程式一樣,用int,也可以用NSInteger,但更推薦使用NSInteger,因為這樣就不用考慮裝置是32位的還是64位的。

2、NSUInteger是無符號的,即沒有負數,NSInteger是有符號的。

3、有人說既然都有了NSInteger等這些基礎類型了為什麼還要有NSNumber?它們的功能當然是不同的。

NSInteger是基礎類型,但是NSNumber是一個類。如果想要儲存一個數值,直接用NSInteger是不行的,比如在一個Array裡面這樣用:

NSArray *array= [[NSArray alloc]init];
[array addObject:3];//會編譯錯誤

這樣是會引發編譯錯誤的,因為NSArray裡面放的需要是一個類,但‘3’不是。這個時候需要用到NSNumber:

NSArray *array= [[NSArray alloc]init];
[array addObject:[NSNumber numberWithInt:3]];

Cocoa提供了NSNumber類來封裝(即以對象形式實現)基礎資料型別 (Elementary Data Type)。

例如以下建立方法:

+ (NSNumber*)numberWithChar: (char)value;
+ (NSNumber*)numberWithInt: (int)value;
+ (NSNumber*)numberWithFloat: (float)value;
+ (NSNumber*)numberWithBool: (BOOL) value;

將基本類型資料封裝到NSNumber中後,就可以通過下面的執行個體方法重新擷取它:

- (char)charValue;
- (int)intValue;
- (float)floatValue;
- (BOOL)boolValue;
- (NSString*)stringValue;

#if __LP64__ || (TARGET_OS_EMBEDDED && !TARGET_OS_IPHONE) || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64typedef long NSInteger;typedef unsigned long NSUInteger;#elsetypedef int NSInteger;typedef unsigned int NSUInteger;#endif

這是NSInteger的定義
對於不同平台32,64位有不同的最大值(int long)。
可以直接轉化。
所以mac os或者ios上的系統api都是使用NSInteger作為參數

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.