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

2017-04-19  本文已影响6人  ladispartion

1.编写代码是经常要定义常量,比如播放动画的时间,也许你会这样做:

#define ANIMATION_DURATION 0.3

这样做虽然可以达到效果,但是定义之后却没有常量的类型信息。假如在某个头文件中引入了这个头文件的代码,则所有的ANIMATION_DURATION都会被替代。

要想更好的解决此问题,应该设法利用编译器的某些特性才对。比如下面这行代码:

static const NSTimerInterval kAnimationDuration = 0.3;

此方式定义的常量包含类型信息,其清楚地描述了常量的含义为NSTimerInterval。有助于其编写开发文档。此类定义方式的命名规则一般是:若某常量局限于某“编译单元,也就是实现文件’之内,则在前面加k;若常量在类之外可见,则通常以类名为前缀。定义格式一般为:static constant 类型 名字 = 内容;

变量一定要同时用static 和 const 来声明。这样编译器不会创建符号而是会像#define预处理指令一样,把所有遇到的变量都替换为常值,且包含有类型信息。

2.有时候需要对外公开某个变量,比如通知。

此类常量需要放在”全局符号表’中,以便可以在定义该常量的编译单元之外使用。方式为:

//In the header file

extern NSString *const LoginStringConst;(类名前缀)

//In the implementation file

NSString *const  LoginStringConst = @“VALUE”;

这个常量在.h文件中声明。在实现文件中”定义”。注意const修饰符在常量类型中的位置。常量定义应从右向左解读。在上例中LoginStringConst 就是“一个常量”,而这个常量是指针,指向NSString 对象。此类常量必须要定义且只能定义一次。通常将其定义在声明该常量的头文件相关的实现文件中。由实现文件生成目标文件时与其他目标文件相链接,以生成最终的二进制文件。凡是用到该LoginStringConst这个全局符号的地方,链接器都能将其解析。

上一篇下一篇

猜你喜欢

热点阅读