2012-08-09 56 views
4

我正確地認爲在ios環境中聲明NSInteger意味着它只會是一個32位值?是NSInteger一個32位整數

我想知道,另一位不熟悉ObjectiveC的程序員使用int32的時候,唯一類似的東西是我在目標C中可以找到的int32_t,_t代表'integer type'。但與這些類型的工作正在成爲一個真正的痛苦,我覺得我沒有像NSInteger似乎從目標c提供的所有控制功能。

任何幫助將不勝感激。

+0

你跟NSInteger的Objective-C中得到什麼樣的控制? – xyzzycoder 2012-08-09 03:18:53

+0

我想沒有那麼多的控制,但易用性,例如將字符串或其他數據類型似乎公平位更容易,其他原始INT類型,如int32_t ..即** NSInteger的敏= [myString的的intValue]; **希望是有道理...我也發現所有的ARM處理器都是32位的..我做了外部搜索,因爲這些文檔沒有真正指定。 – HurkNburkS 2012-08-09 03:21:14

+0

在您的應用程序中的字大小是否重要?我認爲你最好使用Cocoa返回的定義和類型。我不確定你的開發者同事爲什麼要提倡其他的東西? – xyzzycoder 2012-08-09 03:22:59

回答

7

這裏是如何「NSInteger」在「NSObjCRuntime.h」在舊的SDK的定義:

#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 

2013年9月,iPhone手機現在可以使用64位芯片,這意味着NSInteger的可能是更大的運行。在我自己的代碼中,如果我正在做純粹的Objective C,我會堅持使用NSInteger,因爲這種未來證明了我的代碼的可行性。另一方面,開源的東西和某些程序員喜歡使用「uint32_t」或「int32_t」和其他顯式類型,所以當我看到這些時,我嘗試在我正在執行的代碼中匹配它們的樣式用它。

+0

謝謝,你的最後一句話恰恰是我面對的困境。我現在只用6個月左右的目標C全職開發,我正在開發的項目是一個真正有成就的開發人員製作的應用程序的端口(我的老闆)他與德爾福和其他語言合作。所以經常會對我使用的變量類型感到困惑,因爲他以前從未見過它們,當我被要求解釋爲什麼選擇這種變量時,我非常緊張,現在我非常努力地完成對我的決定的理解。我猜是因爲我經驗不足,不得不提出這樣的小問題。 – HurkNburkS 2012-08-09 03:34:35

+0

我不認爲這是一個小問題。如果其他人堅持使用「'int32_t'」,那就讓他開心(尤其是如果這是你的老闆)。 – 2012-08-09 03:35:49

+0

歡呼聲,是的,我可能會在早上和他聊天,談談我在這裏的發現(你們幫助我的發現),看看他說了什麼。但是如果它的原生選擇與他原來的建議幾乎相同,喜歡認爲他會認爲那樣好...再次感謝。 – HurkNburkS 2012-08-09 03:59:14

4

根據C標準,int32_t是一個32位寬的整數類型。

NSInteger是一種整數類型,其寬度定義爲目標平臺上機器字的寬度,實際上它可以是32位或64位。在iOS上,它始終是32位。

因此,實際上,兩者在字面上可以互換,直到您聽到64位iOS。

+0

好吧,這是類似於我的調查提出,但不是簡潔..我擔心的64位iPhone ... – HurkNburkS 2012-08-09 03:28:41

0

的類型定義存在從基本類型,保護你,這就是爲什麼你用它們來代替原始的類型其所謂的便攜性。