时常在单例模式中看到static关键字,不明就里照搬总归无法理解其中的奥义,今天又写到单例决心已定要明白static的道理于是查看文档,如下:

static关键字

前面的局部变量通常都在每次程序进入该局部变量的作用域时分配并在离开时释放。这类存储称为自动存储(默认关键字auto)。

static关键字会在声明变量的时候分配内存,在程序运行期间只分配一次内存。之后再访问时,实际都是在访问原先分配的内存。这适合用于存储创建时使用大量的资源,并且不常改变的局部变量。


voidfunc() {staticExpensive * p = [[Expensive alloc] init];[p doSomeOp];}intmain(intargc,constchar* argv[]){func();// 第一次调用时创建 pfunc();// 第二次调用,此时p已存在,不会再次创建return0;}

因为全局变量默认位于全局作用域中,所以其行为和静态变量一样。也就是说,它们只分配一次内存,并在整个程序运行期间保持不变。

const关键字

const同样会修改所声明变量的内存行为,它所修饰的变量是只读的,即第一次初始化后它的值将不能改变。通常用来声明常量。

#import <Foundation/Foundation.h>intmain(intargc,constchar* argv[]){constNSString *str = @"BeiJing";str = @"ShangHai";// 会产生一个编译错误NSLog(@"dd, %@", str);return0;}