2011-10-02 98 views
36

Objective-C中int,NSIntegerNSUInteger之間的主要區別是什麼?int,NSInteger和NSUInteger之間的區別

哪一個更適合在應用程序中使用?爲什麼?

+0

沒有'NSInt'這樣的東西。 – BoltClock

+0

NSInteger非NSInt .. – Hitarth

+2

[請參閱文檔](http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_DataTypes/Reference/reference.html) – Jiri

回答

29

在這種情況下,您可能右鍵單擊並轉到定義:

#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 
+0

ok thanx i得到它 – Hitarth

+0

容易和正確 –

20

的區別是抽象類型及其同夥從硬件大小。現在我們不必擔心整數是多少,或者指針在特定硬件上有多大。

「C」在這方面不好,只能說明一個long至少和int一樣大,int是硬件的「自然」整數大小(不管是什麼意思),int是至少只要短 - 一個(大混亂)。

這似乎是來自Fortran的一個好主意,但並沒有很好的老化。

可以使用POSIX定義的東西,比如uint32_t,int16_t等。但是這並不能解決指針在任何特定硬件上需要多大。

因此,如果Apple將返回類型定義爲NSUInteger,那麼您只需使用該類型,並且不需要知道它是否爲特定硬件的大小爲16,32或64位。 (我只是爲了舉例而選擇了這些數值)。

正如你在@Bastian中看到的那樣,實際尺寸取決於硬件。

該文檔回答「問題的信」,但沒有提供「爲什麼」的理解?

+0

你正確的。我們只得到他們之間的差異,但爲什麼?我仍然沒有得到請建議我 – Hitarth

+3

這是API標準化。這些框架在多種體系結構上發佈 - 它們都是相同的API。通過使用這些類型定義,Apple正在將平臺差異從API消費者中抽象出來。如果你只是用這些類型的API來說話,那麼(在理論上)你不需要在爲i386,x86_64,ppc,arm7等編譯相同的代碼時考慮平臺差異。這是一個抽象。有人說,你應該使用最高級別的抽象來完成工作。所以除非你有理由不使用這些類型,否則我會說使用它們。 – ipmcc

相關問題