码迷,mamicode.com
首页 > 其他好文 > 详细

static、const

时间:2015-03-02 19:19:48      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:static、const

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

static关键字

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

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


void func() {
    static Expensive * p = [[Expensive alloc] init];
    [p doSomeOp];
}
int main(int argc, const char * argv[])
{
    func(); // 第一次调用时创建 p
    func(); // 第二次调用,此时p已存在,不会再次创建
    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;
}



static、const

标签:static、const

原文地址:http://8749957.blog.51cto.com/8739957/1616580

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!