如何正确定义常量

时间:2011-06-20 18:22:00

标签: objective-c c

  

可能重复:
  Constants in Objective C

我正在设计一个控制器,我需要一些常量(本地,仅适用于该控制器)。看一下Apple提供的一些示例代码,我可以看到以下几行:

#import "Constants.h"

#define kTextFieldWidth 260.0

static NSString *kSectionTitleKey = @"sectionTitleKey";
static NSString *kSourceKey = @"sourceKey";
static NSString *kViewKey = @"viewKey";

const NSInteger kViewTag = 1;

有谁可以向我解释它们之间的区别是什么?我应该使用哪种款式?它们是否依赖于您分配给它们的对象/值的类型?含义使用:static NSString *表示字符串,#define表示浮点数,NSInteger表示整数?你如何做出选择?

2 个答案:

答案 0 :(得分:5)

#define关键字是一个编译时指令,它使define'd值直接注入到代码中。它在整个程序和所有链接库中是全球性的。因此,您可以根据您仅为控制器创建常量的愿望,将其从列表中删除。

static和const之间的主要区别在于 static 变量可以在初始化后更改, const 则不能。如果您希望能够在初始化后修改变量,那么您应该使用 static 关键字。

希望有所帮助。

答案 1 :(得分:0)

Scott和benzado指出that is the best way来定义你的常数值。但是,就定义而言,使用定义调试更加困难,因为通常无法在调试器中轻松查看扩展值。如果您的意图是全局公开变量,则只需要在类的头文件中添加extern声明。接下来要记住的是将const声明放在指针(*)之后,否则在大多数情况下你会从指针得到丢弃限定符的警告。