- 不用用预处理指令定义常量。这样定义出来的常量不含类型信息,编译器只是会在编译前据此执行查找和替换操作。即使用人重新定义了常量值,编译器也不会产生警告信息,这将导致应用程序中的常量值不一致。
- 在实现文件中使用
static const
来定义“只在编译单元内可见的变量”。由于此类变量不在全局符号表中,所以无须为其名称加前缀,但一般以小写k
开头。 - 在头文件中使用
extern
来声明全局常量,并在相关实现文件中定义其值。这种常量要出现在全局符号表中,所以其名称应加以区分,通常用与之相关的类名做前缀。
预处理指令定义常量:不带类型,并且有可能被其他人修改
#define EXAMPLE 1
如果一个变量既声明为static,又声明为const,那么编译器根本不会创建符号,而是会像#define预处理指令一样,把所有遇到的变量都替换成为常值
定义静态局部常量:带有类型,不可被重新定义或被修改,用小写k作为前缀
static const NSInteger kExample = 1;
定义静态全局常量:带有类型,不可被重新定义或被修改,用相关类名作为前缀
static const NSInteger TestClassNameExample = 1;
定义通知名称需要对外部公开某个常量
//头文件
#import <UIKit/UIKit.h>
extern NSString *const TestNotification;
@interface testViewController : UIViewController
@end
//实现文件
#import "testViewController.h"
NSString *const TestNotification = @"TestNotification";
@interface testViewController ()
@end
@implementation testViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
}
@end