iOS const、static、extern

一、const与宏定义的区别

  1. 宏定义是在预编译时处理,const是在编译阶段处理;
  2. 宏定义不做检查,不会报编译错误,只是替换,const会进行编译检查;
  3. 宏可以定义一些函数、方法,const不可以;
  4. 宏定义每次编译都要重新替换,所以大量的宏会导致编译时间变长;

二、const

  1. const只修饰右边的变量,基本数据变量p,指针变量*p;
  2. 被const修饰的变量是只读的,不可更改值;
    //两种写法是一样的,都是只修饰右边变量m
    const int m = 20;
    int const m = 10;
    
    m = 30;//会报错,const修饰后不允许修改值
    
    int a = 10;
    int const *p = &a;
    const int *p = &a;

三、static

修饰局部变量:

  1. 延长局部变量的生命周期,程序结束才会被销毁;
  2. 局部变量只会生成一份内存,只会初始化一次;
  3. 改变局部变量的作用域;

修饰全局变量:

  1. 只在本文件内访问全局变量,修改全局变量的作用域,不改变生命周期;
  2. 避免重定义全局变量;

四、static和const联用

用来声明一个静态只读常量,一般就是静态全局只读常量;

    //声明一个静态全局只读常量,name的值不可变,宏的替代品
    static NSString *const name = @"小明";
    
    //声明的是*word只读
    static NSString const *word = @"hello";
    //所以可以修改word的值
    word = @"world";

五、extern与const联用

extern只能用来获取全局变量的值,不能修饰变量;
extern工作时,现在本文件内查找变量的值,如果没有找到,会去其他文件查找;
如果有多个文件都需要使用的变量,可以使用extern和const联用;

.h文件中
//定义了可在多个文件中共同使用的全局静态常量
extern NSString *const country;
extern NSString *const home;
.m文件中
NSString *const country = @"China";
NSString *const home = @"HeNan";

你可能感兴趣的:(iOS const、static、extern)