我只是查看我的代码并想知道xcode中obj.c的标准。我们有所有这些NS(插入对象类型)与原始的C,C ++对象重叠。我想澄清代码片段的不同替代方案。甚至比解释每一个更好的是指向包含所有这些的指南或参考的链接。
object.property = blah;
或[object setProperty:blah];
float aFloat = 0.01;
(或double
)或CGFloat aFloat = 0.01
int anInt = 1
或NSInteger anInt = 1
@"%d", anInt
或@"%i", anInt
由于
答案 0 :(得分:2)
第一个(点符号与方法调用)纯粹是一种品味。 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教程中首先看到它。永远不要回顾其他占位符的整数(除非%lld
)。只有在编译时知道接收器类型时才使用点表示法。有时你可能要写这个:
id possiblyView = [someObject someView];
// the following line will give compile warning
possiblyView.frame
// the following line won't
[possiblyView frame];
这些调用的结果是相同的,但第一行强制编译器在id-typed结构下查找frame
变量。
我总是尝试使用NS / CG变量类型,因为它们使代码看起来比C-ish更像ObjC。