【问题标题】:How to properly define constants [duplicate]如何正确定义常量[重复]
【发布时间】:2011-09-18 22:18:24
【问题描述】:

可能重复:
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 用于整数?你如何做出选择?

【问题讨论】:

标签: objective-c c


【解决方案1】:

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

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

希望对您有所帮助。

【讨论】:

  • 直截了当,简洁明了。谢谢,我完全明白了!:)
【解决方案2】:

正如 Scott 和 benzado 指出的 that is the best way 来定义您的常量值。然而,就定义而言,使用定义进行调试比较困难,因为您通常不能轻易地在调试器中看到扩展值。如果您的意图是全局公开变量,则只需要在类的头文件中添加一个 extern 声明。接下来要记住的是将 const 声明放在指针 (*) 之后,否则在大多数情况下,您将收到来自指针的丢弃限定符的警告。

【讨论】:

  • 谢谢,在玩耍并阅读了更多解释后,我设法理解了:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-07
  • 2014-03-15
  • 2014-08-28
  • 2018-09-30
  • 1970-01-01
相关资源
最近更新 更多