const+static+extern关键字

这几个常量好好整理一下
一、const与宏 1、宏常见用法: (1)、常见的字符串抽成宏
(2)、常见的代码抽成宏
2、const常量(也能修饰变量): (1)、当有字符串常量的时候,苹果推荐使用const
3、const和宏的区别: (1)、编译时刻:宏是预编译(#在c语言中表示预编译) const在编译时刻编译
(2)、编译检查:宏不会检查错误 const会检查错误
(3)、宏的好处:可以定义代码
(4)、宏的坏处:编译时间过长,因此常用的字符串用const修饰,代码只能用宏
注意:宏不会消耗过多内存,定义一个只会分配一份内存 4、const作用: (1)、只修饰右边的第一个变量(只能修饰变量:基本变量、指针变量、对象变量)
(2)、const修饰的变量只读

//const修饰基本变量 int const i = 10; const int j = 10; //i = 20; //只读//const修饰指针变量 int a = 10; int b = 20; int *const pa = &a; //pa只读变量,*pa变量 int const *pb = &b; //*pb只读变量,pb变量 const int *pc = &a; //*pc只读变量,pc变量 int const * const pd = &b; //*pd只读变量,pd只读变量 const int * const pe = &a; //*pd只读变量,pd只读变量 //pa = &b; //*pa = 30; //const修饰对象变量 NSString * const name = @"name"; //name = @"dashabi";

5、const开发中使用: (1)、用来定义一个全局只读变量
(2)、在方法中一般定义只读参数
//修饰对象 - (void)test:(NSString * const)name{ //在函数中实现只读 //name = @"321"; }//修饰基本变量 - (void)test2:(int const)a{}//修饰指针变量 - (void)test3:(int const *)p{}

二、static和extern 1、static (1)、修饰局部变量
a、延长这个局部变量的生命周期,只要成员运行,局部变量就会一直存在
b、局部变量只会分配一次内存
(2)、修饰全局变量
a、只会修改全局变量的作用域,表示只能是当前文件类使用
//定义静态全局变量 static int i = 100; - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ //static修饰的变量,只会分配一次内存,只会在第一次运行的时候分配,不会每次运行都分配 static int i = 0; i ++; NSLog(@"%d",i); }

2、extern / UIKIT_EXXTERN (1)、声明一个全局变量,不能定义变量
注意:extern修饰的变量不能初始化 (2)、使用场景:一般用于声明全局变量
当在别的类需要使用改类定义的全局变量的时候,只需言在别的类用extern声明即可
extern int aaa;

三、static和const一起使用 【const+static+extern关键字】static和const一起使用表示修饰静态全局只读变量,只能在当前文件夹使用
//const只修饰右边的第一个变量,所以要这样写 static NSString * const strings = @"hmp";

    推荐阅读