第一個(點符號VS方法調用)是純粹的事味道。 man printf
表示%d
和%i
都是帶符號十進制的佔位符,因此ObjC作爲C的嚴格超集不會改變它們的含義。
類型NS
或CG
前綴是平臺相關的,實際上是標準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。
Xcode沒有變量類型 - 它是一個IDE – vikingosegundo