这是一个新手C / Objective-C问题: - )
假设我想要一个CGRectOne和一个CGRectTwo常量。
我该如何宣布?
谢谢, 的Jérémy
答案 0 :(得分:51)
其他答案很好 - 在某些情况下 - 。
A)声明它static
将为每次翻译发出一份副本。如果只对一个翻译可见(即其定义在 .m / .c文件中),那就没问题了。否则,您最终会在每个翻译中包含/导入带有静态定义的标头。这可能会导致二进制文件膨胀,并且会增加构建时间。
B)const CGRect CGRectOne = {...};
将在声明的范围内发出符号。如果碰巧是多个翻译可见的标题,你最终会出现链接错误(因为CGRectOne
被多次定义 - 例如每个 .c / .m文件一次或间接包括定义常量的标题。)
现在您已了解使用这两个声明的上下文,请使用extern
方式。 extern
方式允许您:
extern
方法非常适合在多个文件中重用常量。这是一个例子:
<强> File.h 强>
// the declaration in the header:
extern const CGRect CGRectOne;
<强> File.c /米强>
// the definition:
#import "File.h"
const CGRect CGRectOne = { { 0.0f, 0.0f }, { 1.0f, 1.0f } };
注意:省略const
只会使它成为一个全局变量。
答案 1 :(得分:21)
有几种选择。有了C89,
const CGRect CGRectOne = { { 0.0f, 0.0f }, { 1.0f, 1.0f } };
使用C99,
const CGRect CGRectOne = {
.origin.x = 0.0f,
.origin.y = 0.0f,
.size.width = 1.0f,
.size.height = 1.0f
};
或
const CGRect CGRectOne = {
.origin = { .x = 0.0f, .y = 0.0f },
.size = { .width = 1.0f, .height = 1.0f }
};
答案 2 :(得分:6)
像这样的东西
static CGRect CGRectOne = (CGRect){.origin.x = 1.0f, .origin.y = 1.0f, .size.width = 1.0f, .size.height = 1.0f};
答案 3 :(得分:0)
这里使用的技术对我很有用:http://www.cocos2d-iphone.org/forum/topic/2612#post-16402
基本上是Justin描述的extern方法,但它提供了一个非常完整的例子。
此外,StackOverflow上的这个答案也提供了一个很好的例子:Constants in Objective-C