多用类型常量,少用#define预处理命令

来源 ——《Effective Objective-C 2.0 》Matt Galloway

编写代码时经常要定义常量。例如,要写一个UI视图类,此视图显示出来以后就播放动画,然后消失。你可能想把播放动画的时间提取为常量。可能会这么写:

上述预处理指令会把源代码中的ANIMATION_DURTION字符串替换为0.3。这可能就是你想要的效果,不过这样定义出来的常量没有类型信息。“持续”(duration)这个词看上去应该与时间相关,但是代码中又未明确指出。此外,预处理过程会把碰到的所有ANIMATION_DURATION一律替换成0.3。这样的话,假设此指令声明在某个头文件中,那么所有引入了这个头文件的代码,其ANIMATION_DURATION都会被替换。

要想解决此问题,应该设法利用编译器的某些特性才对。有个办法比用预处理指令来定义常量更好。比方说,这样写:

请注意,此方式定义的常量包含类型信息,其好处是清楚地描述了常量的含义。由此可知该常量类型为NSTimeInterval,这有助于为其编写开发文档。如果要定义许多常量,那么这种方式能令稍后阅读代码的人更易理解其意图。 继续阅读多用类型常量,少用#define预处理命令