04@多用类型常量,少用#define预处理指令

274 阅读1分钟

#define预处理

  • 不要用预处理指令定义常量。这样定义出来的常量不含类型信息,编译器只是会在编译前据此执行查找与替换操作。即使有人重新定义了常量值,编译器也不会产生警告信息,这将导致应用程序中的常量值不一致。
// 预处理指令,预处理指令把源码中ANIMATION_DEFATION替换为0.3
#define ANIMATION_DEFATION 0.3 // 不推荐

// 推荐 定义常量的方法
static const NSTimeInterval kAnimationDuration = 0.3;
// 变量一定要同时用static 和const来声明。
//试图修改const修饰符锁声明的变量,那么编译器会报错。
//static修饰符意味着该变量仅在此变量的编译单元内可见。

static const定义单元内可见的常量

  • 在实现文件中使用static const来定义“只在编译单元内可见的常量”。由于此类常量不在全局符号表中,所以无需为其名称加前缀。

| 注意:若常量在实现文件内,在前字母加k。若在类之外可见,常加类名为前缀。

使用extern来声明全局变量

  • 在头文件中使用extern来声明全局变量,并在相关实现文件中定义其值。这种常量要出现在全局符号表中,所以其名称应加以区隔,通常用与之相关的类名做前缀。
// In the header file
extern NSString *const EOCStringConstant;

// In the implementation file
NSString *const EOCStringConstant = @"VALUE";