static
关键字
static
关键字用于修饰变量。
-
static
修饰局部变量- 当使用
static
修饰局部变量时, 改变了变量的生命周期(存储方式),即在编译时就为变量分配内存,直到程序退出时才释放存储单元。因此,在下次执行此代码块时,变量中能够有上一次存储的值。即变量有了记忆功能。 - 使用
static
修饰的变量仍然是局部变量
,其作用域
并未改变,仍然只能在代码块内部使用。
- 当使用
-
static
修饰全局变量
在此我们首先应该明白全局变量
的一些属性。
全局变量
:全局变量
是定义在代码块之外({}花括号外面)的变量,它缺省为静态变量,编译时分配内存,程序结束时释放内存单元。同时 其作用域很广,整个文件都有效甚至别的文件也能引用它。当使用
static
修饰全局变量
时,限制了全局变量的作用域,使得全局变量
只在本文件中有效
。如果希望在其他文件中使用此变量,可以使用关键字extern
实现。具体的实现方式可以看后面extern
关键字部分。 -
疑问,下面这个问题我没有弄明白,如果有人知道为什么,希望能告诉我
为什么使用static
修饰的全局变量仍可以在其他文件中调用?在.h文件中。定义全局变量,编译器会报错。
同样在.h文件中,使用static
修饰全局变量,编译器则不再报错。但是,这个全局变量却可以在其他文件中 调用,正常的话,使用static
后不是应该只在本文件中才能使用吗?而且在其他文件中调用的变量时,其实是实例出了一个新的变量。
const
关键字
const
关键字用于修饰变量,作用是限定变量的读写权限,const
修饰的变量不可变- 使用
const
关键字修饰变量时。const
所处的位置不同,所达到的效果不同。总的来说是:const
右边的值不可变
-
const
修饰指针变量
static NSString const * str = @"东临碣石,以观沧海";
static const NSString * str = @"东临碣石,以观沧海";
以上两种方式的作用是一样的,字符串str
的值(东临碣石,以观沧海
)是可以被修改的,而指向str
的值的指针是不能被修改的。
-
const
修饰变量
static NSString * const str = @"东临碣石,以观沧海";
上面定义的变量str
的值(东临碣石,以观沧海
)是不可变的。
extern
关键字
extern
作用:用来获取全局变量(包括全局静态变量)的值,不能用于定义变量extern
原理:先在当前文件查找有没有全局变量,没有找到,才会去其他文件查找。
可以在.m文件中定义全局变量
NSString * const nameKey = @"name";
然后再其他任何地方获取这个全局变量
extern NSString * const nameKey;
注意:我们这里没有使用static
修饰
网友评论