我想在我的.m文件中定义一个常量。我可以在这里看到两个选项:
static NSString *const kMyLabel = @"myLabel";
#define kMyLabel @"myLabel"
哪一个最好?在这里使用静态有什么问题吗?
答案 0 :(得分:3)
唯一的区别是你可以获取变量的地址,而你不能获取常量字符串表达式的地址(这是宏减少的地址)。我倾向于在可能的情况下避免使用#define
,所以我会选择前者,但这只是风格问题。
答案 1 :(得分:1)
在大多数情况下,从使用角度来看并不重要。但是使用静态方法略有优势,因为代码中kMyLabel
常量的每次使用都是指向完全相同对象的指针(在大多数情况下),而#define
方法将创建副本的字符串。我相信在最近的编译器中,它足够聪明地将defines
作为一个对象,但为了安全起见,我只使用static
方法。