1. const关键字
const
修饰的变量表示变量值只读。
类型 * const 指针变量
,可以改变指针指向的内容,不能改变指针的指向int x = 1; int y = 2; int * const xp = &x; // xp = &y; Cannot assign to variable 'xp' with const-qualified type 'int *const' *xp = 10;
类型 const * 指针变量
,可以改变指针的指向,不能改变指针指向的内容int x = 1; int y = 2; int const *xp = &x; xp = &y; // *xp = 10; Read-only variable is not assignable
类型 const * const 指针变量
,指针的指向、指针指向的内容都不可以改变int x = 1; int y = 2; int const * const xp = &x; // xp = &y; Cannot assign to variable 'xp' with const-qualified type 'int *const' // *xp = 10; Read-only variable is not assignable
2. static关键字
- 修饰局部变量,使局部变量永远只初始化一次
输出int add(int value) { static int sum = 0; sum += value; return sum; } int main(int argc, const char* argv[]) { NSLog(@"%d", add(1)); NSLog(@"%d", add(3)); NSLog(@"%d", add(5)); NSLog(@"%d", add(7)); return 0; }
1 4 9 16
- 修饰全局变量,使全局变量的作用域仅限于当前文件内部
@implementation DataManager static DataManager *manager = nil; + (DataManager *)getDataManager { static dispatch_once_t once; dispatch_once(&once, ^(void){ manager = [[DataManager alloc] init]; }); return manager; } @end
3. extern关键字
extern
用来修饰全局变量,在.h
文件中声明全局变量,在.m
文件中定义。
GlobalConstant.h
文件
@interface GlobalConstant : NSObject
extern NSString * const GC_NUMBER;
@end
GlobalConstant.m
文件
@implementation GlobalConstant
NSString * const GC_NUMBER = @"0123456789";
@end
只要在源文件中导入头文件,就可以全局的使用定义的变量或常量。
也可以在源文件中加上一个外部声明
extern NSString * const GC_NUMBER;