我的项目中有一些字符串,我想将所有字符串放在一个常见的文件中,表示常量。
(第一种方法) 在constants.h中,我可以这样做:
#define COMMON_STRING @"myString"
OR
(第二种方法)
在constants.h中
extern NSString *const COMMON_STRING;
在constants.m
中 NSString *const COMMON_STRING = @"myString";
哪种方法更好用,为什么?或者我们还有其他更好的方法吗?
编辑:
根据那个帖子extern NSString * const COMMON_STRING;在记忆角度方面更好。但在某些地方我还读到#define会将字符串插入所有出现的内容,除非编译器优化相同的常量字符串出现,否则将内存使用量相乘 - 这就是情况。那么不使用#define是否有意义?
在建议的帖子中,一个帖子只定义了结构,另一个帖子解释了比较但非常有限而不是我期待的。如果编译器优化相同的常量字符串出现,那么为什么要使用extern NSString * const COMMON_STRING而不是#define COMMON_STRING?
答案 0 :(得分: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
尽可能使用类型安全的替代方法而不是宏/省略号。
如果你真的需要使用宏(例如,你想要 FILE 或 LINE ),那么你最好小心地命名你的宏因为它的宏命名约定Boost推荐所有大写字母,从项目名称(此处为BOOST_)开始,在使用库时,您会注意到(通常)后面跟着特定区域(库)的名称,然后是一个有意义的名称。