时常在单例模式中看到static关键字,不明就里照搬总归无法理解其中的奥义,今天又写到单例决心已定要明白static的道理于是查看文档,如下:
static关键字
前面的局部变量通常都在每次程序进入该局部变量的作用域时分配并在离开时释放。这类存储称为自动存储(默认关键字auto)。
static关键字会在声明变量的时候分配内存,在程序运行期间只分配一次内存。之后再访问时,实际都是在访问原先分配的内存。这适合用于存储创建时使用大量的资源,并且不常改变的局部变量。
void func() {
static Expensive * p = [[Expensive alloc] init];
[p doSomeOp];
}
int main(int argc, const char * argv[])
{
func();
func();
return 0;
}
因为全局变量默认位于全局作用域中,所以其行为和静态变量一样。也就是说,它们只分配一次内存,并在整个程序运行期间保持不变。
const关键字
const同样会修改所声明变量的内存行为,它所修饰的变量是只读的,即第一次初始化后它的值将不能改变。通常用来声明常量。
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
const NSString *str = @"BeiJing";
str = @"ShangHai";
NSLog(@"dd, %@", str);
return 0;
}