《Effective Objective-C 2.0 编写高质量iOS与OS X的52个有效方法》读书总结
第一章 熟悉的Objective-C
第4条:多用类型常量,少用#define预处理指令
编写代码时经常要定义常量。
预处理指令 #define
#define ANIMATION_DURATION 0.3
这样定义出来的常量没有类型信息。
特点:“持续”(duration)
预处理过程会把遇到的所有ANIMATION_DURATION一律替换为0.3,若此指令出现在某个头文件中,那所有引入这个头文件的代码,都会被替换。
类型常量 static const
static const NSTimeInterval KAnimationDuration = 0.3;
用此方法定义的常量包含类型信息,清楚地描述了常量的含义。
常量命名:
若常量局限于某“编译单元”即“实现文件”(implementation file)之内,则在前面加字幕k;
若常量在类之外可见,则以类名为前缀,避免名称冲突。
常量位置:
尽量不重要在头文件声明预处理指令,避免常量名称出现冲突;
static 修饰符表示该变量仅在定义次变量的编译单元可见。若声明时不加static,编译器会创建一个外部符号(external symbol),若另一个编译单元声明同名,会报错。
声明外界可见,在头文件中使用extern声明全局变量,在相关实现文件中定义其值
// In the header file
extern NSString *const EOCStringConstant;
// In the implementation file
NSString *const EOCStringConstant = @"VALUE";