可能重复:
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
表示整数?你如何做出选择?
答案 0 :(得分:5)
#define关键字是一个编译时指令,它使define'd值直接注入到代码中。它在整个程序和所有链接库中是全球性的。因此,您可以根据您仅为控制器创建常量的愿望,将其从列表中删除。
static和const之间的主要区别在于 static 变量可以在初始化后更改, const 则不能。如果您希望能够在初始化后修改变量,那么您应该使用 static 关键字。
希望有所帮助。
答案 1 :(得分:0)
Scott和benzado指出that is the best way来定义你的常数值。但是,就定义而言,使用定义调试更加困难,因为通常无法在调试器中轻松查看扩展值。如果您的意图是全局公开变量,则只需要在类的头文件中添加extern声明。接下来要记住的是将const
声明放在指针(*)之后,否则在大多数情况下你会从指针得到丢弃限定符的警告。