程序员iOS学习笔记将来跳槽用

static、const和extern分析总结

2019-08-06  本文已影响6人  鲲鹏DP

1.static

1.1 修饰局部变量:改变局部变量的作用域,延长其生命周期直到程序结束
未使用static.png [图片上传中...(未使用static.png-c36ead-1565075572189-0)]
1.2修饰全局变量:全局变量变成静态全局变量。

多个类中定义相同全局变量会报duplicate symbol错误

64D9300F25427BFD14FEDCF60DD99F70.png FA2D3EDE1AEA82A885E93A1F8EC08DAA.jpg
想要能够在多个类中定义相同全局变量,可以用static修饰,将全局变量变成静态全局变量。静态全局变量可以多文件共存,相互之间独立,互不影响;
1.3 应用实例
1080BC55-8B91-402D-B521-D1824CF46964.png

小结:

全局变量与全局静态变量的区别:

(a)若程序由一个源文件构成时,全局变量与全局静态变量没有区别。
(b)若程序由多个源文件构成时,全局变量与全局静态变量不同:全局静态变量使得该变量成为定义该变量的源文件所独享,即:全局静态变量对组成该程序的其它源文件是无效的。

静态全局变量的作用:
(a)不必担心其它源文件使用相同变量名,彼此相互独立。

static


2.extern:跨文件引用

2.1 修饰全局变量

.h文件中定义一个extern修饰的全局变量,对应.m文件中也需要对应定义(去掉extern)

5036DA8A99F7D7A71E5B2FE38956AA25.png AF86BF870B7B2A152D06407C1D1CC53D.png

跨文件调用时,如果引入定义变量的.h文件,那么可以直接使用全局变量;如果没有引入定义全局变量的.h,那么需要使用extern关键字来调用该变量;

3772DFE2CDE6305829E9C1B48577A6AC.png
2.2 extern的应用

常与const联合使用,定义一些不可变的全局数据。可以专门定义一个类来管理所有的全局变量,代替宏

20FF59A0-12B9-4275-88B4-5A54796393A2.png

3.const:常量

3.1 const位置不同,所得到的结果不同——只修饰右边的。
AC3E8B779C0890C9077FCBC6DF7D3EC6.png
3.2 const与宏。

全局的一些常量可以抽成宏,全局使用。但是苹果官方更推荐使用const常量。

4.const,extern和static的混合使用;

4.1static与const:全局静态变量,只能文件内部使用,相互之间不影响,根据const的位置,决定当前变量是否可变
/*值可变,地址不可变*/
static  NSString const*  userCode;
static  const NSString *  userName;
/*值不可变,地址可变*/
static  NSString * const sex;
4.2extern与const :外部全局变量,可以通过extern关键字,在不引入.h文件的情况下,跨文件使用。根据const的位置,决定当前变量是否可变。
/*值可变,地址不可变*/
extern  NSString const*  userCode;
extern  const NSString *  userName;
/*值不可变,地址可变*/
extern  NSString * const sex;
上一篇下一篇

猜你喜欢

热点阅读