温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

static、const

发布时间:2020-07-04 16:35:09 来源:网络 阅读:294 作者:海波piano 栏目:开发技术

时常在单例模式中看到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;
}



向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI