3

我的项目中有一些字符串,我想将所有字符串放在一个公共文件中,比如常量。

(第一种方法) 在 constants.h 中,我可以这样做:

    #define COMMON_STRING @"myString"

或者

(第二种方法)

在常量.h

    extern NSString *const COMMON_STRING;

在常数.m

    NSString *const COMMON_STRING = @"myString";

哪种方法更好用,为什么?或者我们有其他更好的方法吗?

编辑:

根据那个帖子 extern NSString *const COMMON_STRING; 从记忆的角度来看更好。但是在某处我还读到#define 会将字符串插入所有出现的位置,通过它-乘以内存使用量,除非编译器优化相同的常量字符串出现-就是这种情况。那么不使用#define 有意义吗?

在建议的帖子中,一篇文章只定义了结构,另一篇文章解释了比较,但非常有限,不是我所期望的。如果编译器正在优化相同的常量字符串出现,那么为什么要使用 extern NSString *const COMMON_STRING 而不是#define COMMON_STRING?

4

1 回答 1

2

通常来说,一般来说:

static const

它尊重范围并且是类型安全的。

我能看到的唯一限制是,如果您希望变量可能在命令行上定义。

但是还有一个选择:

#ifdef VAR // Very bad name, not long enough, too general, etc..
static int const var = VAR;
#else
static int const var = 5; // default value
#endif

尽可能使用类型安全的替代方法,而不是宏/省略号。

如果你真的需要使用宏(例如,你想要FILELINE),那么你最好非常小心地命名你的宏,因为在它的命名约定中,Boost 推荐所有大写字母,以项目名称开头(这里是 BOOST_),在使用库时,您会注意到它(通常)后跟特定区域(库)的名称,然后是有意义的名称。

于 2013-08-25T15:15:45.147 回答