2011-06-28 27 views
1

我只是看着我的代碼,想知道xcode中obj.c的標準。我們有所有這些與原始C,C++對象重疊的NS(插入對象類型)。我想澄清代碼片段的不同備選方案。甚至比解釋每一個更好的鏈接將是一個鏈接到包含所有這些指南或參考。Xcode變量類型的最佳編碼習慣?

object.property = blah;[object setProperty:blah];
float aFloat = 0.01;(或double)或CGFloat aFloat = 0.01
int anInt = 1NSInteger anInt = 1
@"%d", anInt@"%i", anInt

由於

+1

Xcode沒有變量類型 - 它是一個IDE – vikingosegundo

回答

2

第一個(點符號VS方法調用)是純粹的事味道。 man printf表示%d%i都是帶符號十進制的佔位符,因此ObjC作爲C的嚴格超集不會改變它們的含義。

類型NSCG前綴是平臺相關的,實際上是標準C類型的typedef。如果您決定使用NS/CG類型編譯不同的平臺(比如說32/64位),將會回退到您正在編譯的平臺的默認類型。舉個例子NSInteger(從NSObjCRuntime.h片段):

#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 

這表明,如果你不編譯爲iOS上,NSInteger的將站在long,否則 - 這將是簡單int

個人觀點

我總是用%d因爲我在一些ObjC tutoria第一次看到它。從不回頭看看其他佔位符的整數(除非%lld)。只有在編譯時已知接收器類型時才使用點符號。有時你可能不得不這樣寫:

id possiblyView = [someObject someView]; 
// the following line will give compile warning 
possiblyView.frame 
// the following line won't 
[possiblyView frame]; 

這些電話的結果是一樣的,但在ID類型的結構的第一線部隊的編譯器查找frame變量。

而且我總是嘗試使用NS/CG變量類型,因爲它們使代碼看起來比C-ish更爲ObjC-ish。

+0

感謝您的解釋。我可能會開始一直使用NS/CG變量類型,所以我的代碼看起來是「ObjC-ish」:D。 –