开发的时候,不免要定义一些常量,例如 #define offSet 30 这样,把offSet替换为30。但是这样定义出来的常量没有类型信息,命名又未明确指出类型。有个办法比#define更好,那就是类型常量:
static const CGFloat offSet = 30;
这样的话就清楚描述了常量的含义,可以知道类型为CGFloat,代码更容易理解。而且也要注意定义常量的位置,如果不用公开的,可以在.m文件定义,一定同时要用static和const来声明。
但是有时候需要对外公开某个常量值,此类常量需要放在“全局符号表”中,以便可以在定义该常量的编译单元之外使用,定义方式与上述有所不同:
//.h文件
extern NSString *const SPNString;
//.m文件
NSString *const SPNString = @"String";
在.h文件中声明,在.m文件中定义,注意本次命名添加了前缀,因为定义为全局变量,要避免命名冲突,最好加上自己的前缀。SPNString是一个常量,而且是指针类型的常量,指向 NSString对象。extern关键字是告诉编译器,全局符号表中有一个叫SPNString的符号。编译器无需查看其定义,即允许代码使用此常量。一般来说,此类常量必须要定义,而且切记只能定义一次。