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一起使用

static和const一起使用表示修饰静态全局只读变量,只能在当前文件夹使用

//const只修饰右边的第一个变量,所以要这样写
static NSString * const strings = @"hmp";

你可能感兴趣的:(const+static+extern关键字)