const、static、extern正确使用方式

经常可以在一些大牛的代码中看到const、static、extern的使用,特别是一些组合,例如extern + const,static + const。这些组合究竟怎么使用呢?

一、const

const的作用和宏是很类似的,其实,苹果是不推荐我们使用宏的,它更喜欢我们使用const,于是乎,在swift中宏就被抛弃了,我们只能使用const。

在这里简单聊一下const和宏的区别:

1.编译时刻 宏:预编译 const:编译

2.编译检查 宏没有编译检查,不会报编译错误,只是替换;const有编译检查,会报编译错误

3.宏的好处 宏能定义一些函数,方法,但是const不可以

4.宏的坏处 大量使用宏,会导致预编译时间过长。

const有两个作用:

1.修饰右边的基本变量和指针变量;

2.被const修饰的变量只读,也就是只能获取,不能修改。

const的使用场景:

1.修饰全局变量 ==>全局只读变量 ==> 代替宏

2.修饰方法中的参数

二、static

static有两个作用:

1.修饰局部变量:被static修饰的局部变量,可以延长生命周期,生命周期跟整个应用程序一致;被static修饰的局部变量,只会分配一次内存。

2.修饰全局变量:被static修饰的全局变量,作用域会修改,生命周期不会改,只能在当前文件下使用。

三、extern

extern作用:声明外部全局变量。

extern工作原理:先会去当前文件下查找有没有对应全局变量,如果没有,才会去其他文件查找。

四、static和const的组合使用

static,const结合使用的作用:声明一个只读的全局静态变量。

开发使用场景:在一个文件中经常使用的字符串常量,可以使用static与const组合。

五、extern和const的组合使用(重点)

使用场景:在多个文件中经常使用的同一个字符串常量,可以使用extern与const组合。

开发时有个规定,为了避免重复报错,全局变量不能定义在自己的类中,我们需要自己创建一个全局文件管理全局东西。

创建一个全局类GlobelConst类。

代码如下:

//.h文件
#import<Foundation/Foundation.h>

extern NSString * const discover_name;

extern NSString * const home_name;
//.m文件
#import "GlobelConst.h"

//定义整个项目中的全局变量

/**********  发现模块  **********/

NSString * const discover_name = @"name";

/**********  首页模块  **********/

NSString * const home_name = @"name";

从而实现类似宏的效果,对于加快预编译而言,确实有效,配合上宏的函数定义,就可以互补优缺。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容