iOS的const/static/extern

Author Avatar
xiaoLit Created: May 22, 2019 Updated: Oct 14, 2019

由单利的全局静态变量引起小总结。

const 常量

作用:

  • const用来修饰右边的基本变量或指针变量
  • 被修饰的变量只读,不能被修改

修饰基本变量:

int  const  a = 1;
const  int  a = 1;
都是声明一个int类型的变量a,变量初始化值为1,const修饰变量a让其只读

修饰指针变量:

int  const  *p            //p变量 *p只读 
int  * const  p           //p只读 *p变量 
const  int   * const p    //p只读 *p只读
int  const  * const  p    //p只读 *p只读

注:
const总拿来和宏对比:

const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量。

编译时刻:宏是预编译(编译之前处理),const是编译阶段。
编译检查:宏不做检查,不会报编译错误,只是替换,const会编译检查,会报编译错误。

宏的好处:宏能定义一些函数,方法。 const不能。
宏的坏处:使用大量宏,容易造成编译时间久,每次都需要重新替换。

static

修饰局部变量作用:

  • 保证局部变量只初始化一次,即在程序的运行过程中永远只有一份内存
  • 延长生命周期到程序结束

修饰全局变量作用:

  • 使全局变量的作用域仅限于当前文件内部,即当前文件内部才能访问该全局变量。

extern

作用:

  • 只是用来获取全局变量(包括全局静态变量)的值,不能用于定义变量

staic和const搭配

iOSstaicconst常用使用场景,是用来代替宏,把一个经常使用的字符串常量,定义成静态全局只读变量。

static  NSString * const key = @"abcdefgKey";
static  NSString * const viewH = 40;

extern与const搭配

在多个文件中经常使用的同一个字符串常量,可以使用extern与const组合。例如URL等。

URL.h中:

extern NSString * const testUrl;  //从.h和.m文件中获取testUrl并声明为常量。

URL.m中:

NSString * const testUrl = @"testUrl";  //声明并且定义url内容

Reference

【如何正确使用const,static,extern】|那些人追的干货

iOS开发中的关键字const/static/extern

Swift新增内容

https://www.jianshu.com/p/38990450e7a4