static关键字可修饰局部变量和全局变量,当用它修饰变量的时候,会改变变量原来的一些属性。
static修饰局部变量
当用static修饰局部变量的时候,该局部变量只能初始化一次,在内存中的地址不变,并随着程序的结束而销毁掉(延长了局部变量的生命周期)。
看图:
num1是一个局部变量,而num2是一个用static修饰过的局部变量。每次调用test方法的时候,num1都是重新初始化,且打印的结果都是0,其内存地址也会发生变化。而用static修饰了的局部变量num2却完全不同了,num2只会初始化一次,且最终的打印结果是1,其内存地址也不会发生变化。
看图:
static修饰全局变量
static修饰全局变量之后,可让该全局变量的作用域只在本类中。
看图:
在两个控制器中定义两个相同的全局变量,var1是普通的全局变量,var2是被static修饰过的全局变量,当我们运行的时候会报错。
报错:var1全局变量重复定义,而用static修饰过的var2不会报这个错,这主要就是因为我们用static对var2进行了修饰,让它作用域只限在本类中,外部类无法访问该变量。
对于静态全局变量,如果该变量定义在.h文件中,那么外部类导入该.h文件, 仍然可以访问该全局变量,但也能创建一个同名的变量,且同名的变量有效。
extern关键字
我们可以使用extern来访问全局变量。
我们在某个类中即使没有引入定义全局变量var1的文件也能访问该全局变量。
// extern+const声明全局常量
extern NSString *const LSName;
尽量使用全局常量,而不要使用宏定义(可被修改、无类型、增加编译时间)
OC中的类方法类似于C中的static函数,在全局中只有一份。
****本篇文章到这里就结束了,愿大家加班不多工资多,男同胞都有女朋友,女同胞都有男朋友。😊***