为什么类方法中的静态变量可以保留其初始引用?

时间:2016-01-11 14:44:33

标签: objective-c

代码快照

conf.d/local.ini

我想知道变量'sharedStore'如何能够将引用分配给自己,无论方法执行多少次。

似乎这样的变量是静态的但是在Java中这样的变量是临时的并且在退出方法时熄灭...更多的是,如果首先将sharedStore分配给nil然后设置为实例,那么为什么nil不能设置为下次进入方法时再次变量?如何将引用保留为方法变量?

2 个答案:

答案 0 :(得分:2)

它实际上被视为static变量是一个全局变量,因为它存储在堆中(或者可能是数据段;感谢@jlehr)而不是堆栈:< / p>

BNRItemStore*sharedStore=nil;
+(instancetype)sharedStore{

    if(!sharedStore){
        sharedStore=[[self alloc]initPrivate];
    }
    return sharedStore;
}

然而,只有在方法中才能看到它。

答案 1 :(得分:0)

static关键字在C中意味着与在Java中完全不同。

在函数(方法)范围内,这意味着变量是持久的,这意味着即使在执行离开函数范围之后它也会保留其值。

在文件(编译单元)级别,它创建一个对文件中的所有代码可见的变量,但该变量对该文件是私有的。这意味着另一个声明同名静态变量的文件会创建第二个变量。