静态常量Vs定义指令

静态常量Vs定义指令

问题描述:

我想在我的.m文件中定义一个常量。我可以在这里看到两种选择:静态常量Vs定义指令

static NSString *const kMyLabel = @"myLabel"; 

#define kMyLabel @"myLabel" 

哪一个是最好的?在这里使用static有任何问题吗?

唯一的区别是,你可以把变量的地址,而你不能接受一个常量字符串表达式的地址(这是宏减少到)。如果可能,我宁愿避免#define,所以我会选择前者,但这只是一个风格问题。

+0

明白了。谢谢! – Abhinav 2011-01-24 21:53:50

从使用的角度来看,大部分情况并不重要。但是使用静态方法有一个小优点,即代码中常量的每个用法都是指向完全相同对象的指针(大多数情况下),而#define方法将创建该字符串的副本。我相信在最近的编译器中,它足够智能地将defines作为一个对象,但为了安全起见,我只是使用static方法。

+1

都不会创建字符串的副本。常量字符串在编译单元中是唯一的。 – Chuck 2011-01-24 20:59:37