OC中的static关键字

static关键字可修饰局部变量和全局变量,当用它修饰变量的时候,会改变变量原来的一些属性。

static修饰局部变量

当用static修饰局部变量的时候,该局部变量只能初始化一次,在内存中的地址不变,并随着程序的结束而销毁掉(延长了局部变量的生命周期)。
看图:


0.static修饰局部变量.png

num1是一个局部变量,而num2是一个用static修饰过的局部变量。每次调用test方法的时候,num1都是重新初始化,且打印的结果都是0,其内存地址也会发生变化。而用static修饰了的局部变量num2却完全不同了,num2只会初始化一次,且最终的打印结果是1,其内存地址也不会发生变化。
看图:


0.局部变量.png

static修饰全局变量

static修饰全局变量之后,可让该全局变量的作用域只在本类中。
看图:


0.var.png
0.varr.png

在两个控制器中定义两个相同的全局变量,var1是普通的全局变量,var2是被static修饰过的全局变量,当我们运行的时候会报错。


0.static.png

报错:var1全局变量重复定义,而用static修饰过的var2不会报这个错,这主要就是因为我们用static对var2进行了修饰,让它作用域只限在本类中,外部类无法访问该变量。

对于静态全局变量,如果该变量定义在.h文件中,那么外部类导入该.h文件, 仍然可以访问该全局变量,但也能创建一个同名的变量,且同名的变量有效。

extern关键字

我们可以使用extern来访问全局变量。


0.extern.png

我们在某个类中即使没有引入定义全局变量var1的文件也能访问该全局变量。

// extern+const声明全局常量
extern NSString *const LSName; 

尽量使用全局常量,而不要使用宏定义(可被修改、无类型、增加编译时间)

OC中的类方法类似于C中的static函数,在全局中只有一份。

****本篇文章到这里就结束了,愿大家加班不多工资多,男同胞都有女朋友,女同胞都有男朋友。***

你可能感兴趣的:(OC中的static关键字)