4、多用类型常量,少用#define预处理指令
// ------ 使用静态常量
// 1.类之内可见
static const NSTimeInterval kAnimationDuration = 0.3; // .m
// 若不加static,这会创建“外部符号”(external symbol)),其他类有同名的会冲突
// static const: 不会创建符号,直接替换,但是有类型检查
// 2.类之外可见:
extern NSString *const MOBTManagerConnectedNotification; // .h
NSString *const MOBTManagerConnectedNotification = @"value"; // .m
// 会创建符号,放在“全局符号表”(constant variable)中
// ------ 而不是宏定义
#define ANIMATION_DURATION 0.3
// 宏定义没有类型,编译期只是单纯替换,不会做类型检查常量局限于某“编译单元”(translation unit,也就是“实现文件”,implementation file)之内,则在前面加字母k;
常量在类之外可见,则通常以类名为前缀。
尽量不要在头文件里声明
#defineorstatic const,因为OC没有“名称空间”(namespace)这一概念,所以那样做等于声明了一个全局变量
要点:
不要用预处理指令定义常量。这样定义出来的常量不含类型信息,编译期只是会在编译前据此执行查找与替换操作。即使有人重新定义了常量值,编译器也不会产生警告信息,这将导致应用程序中的常量值不一致
在实现文件中使用
static const来定义“只在编译单元内可见的常量”(translation-unit-specific constant)。由于此类常量不在全局符号表中,所以无须为其名称加前缀在头文件中使用extern来声明全局常量,并在相关实现文件中定义其值。这种常量要出现在全局符号表中,所以其名称应该加区隔,通常用与之相关的类名做前缀。
Last updated
Was this helpful?