const,static,extern的使用

1⃣️.const和宏的区别
宏是预编译,const是编译时刻,只会编译一次;宏不会检查错误,const会检查错误,常用的字符串通常使用const修饰;宏的优点是可以定义一段代码,如果一个文件里面宏太多,会造成编译时间过长.但是其实定义宏并不会消耗内存,只会分配一次内存地址.

2⃣️.const的使用:只能修饰变量(基本数据类型,指针变量 (int *),对象变量),const修饰的变量,仅仅是修饰相邻右边的变量,表示只读,不可以修改.
int const a = 10,a的值不可修改,但是仍然是变量,是个只读变量.
const int a = 10,a也是只读变量
用const修饰指针变量

 int a = 10;
 int *const p = &a    //p:只读变量, *p:变量
 const int *p = &a    //*p:只读变量, p:变量
 int const *p = &a    //*p:只读变量,p:变量
 int const * const p = &a    //*p:只读,p:只读
 const int *const p = &a     //*p:只读,p:只读

3⃣️.const的使用场景
1.全局只读变量NSString *const name = @"little prince"
2.方法中定义个只读参数;-(void)test:(NSString * const)name方法中就不可以修改name的值了.

4⃣️.static
1:修饰局部变量,会延长局部变量的生命周期,只要程序运行,局部变量一直存在,而且只会分配一次内存.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{ // static:修饰的变量,程序一运行就会分配一次内存
   static int i = 0;
    i++;
    NSLog(@"%d",i);//i的值一直增加
}

2.修饰全局变量:只会修饰全局变量的作用域,表示只能是当前类内中可以使用.

️.extern
只能申明一个变量,不能定义变量,修饰的变量不能初始化.一般用于申明全局变量,全局变量和VC的加载没有关系.比如在ViewController.m中申明一个全局 int i = 3,在AppDelegate.m中extern int i.并且打印i可以得到值3.

6⃣️.static 和const修饰全局变量,
static修饰全局变量,修改作用域,在当前文件中使用,const表示变量只读的.联合修饰时静态全局只读变量.Static NSString * const name = @"rose";

7⃣️.extern和const联合使用,全局的只读变量
extern NSString * const name = @"rose"

8⃣️.我们可以创建一个文件,在.m中定义全局变量.需要在.m中导入Foundation框架.然后写入全局变量,防止重复使用变量名.可以用UIKIT_EXTERN来代替extern,显得高大上点.

以上

你可能感兴趣的:(const,static,extern的使用)