类扩展中的静态变量和变量有什​​么不同?

时间:2013-05-05 07:51:18

标签: objective-c static-variables class-extensions

静态变量“声明变量static将其范围限制为仅限于类 - 并且仅限于在文件中实现的类的部分”(Apple doc)。

我认为类扩展中定义的变量只有类定义它才有限制范围。

这是类似的!

类扩展中的静态变量和变量有什​​么不同?

1 个答案:

答案 0 :(得分:7)

static变量与其定义的文件相关联。它无法从该文件的外部访问,并且在整个程序中只为其创建了一个存储位置。

存储的区别也适用于非静态全局变量 - 程序中只有一个。

类扩展中的变量同样受限于其声明的文件的可见性,但它是实例变量。您创建的每个类的实例都附加了一个新的存储空间。

如果您创建一个static变量并从该类的多个实例更改其值,则每个实例都将看到相同的值。 ivar不是这种情况 - 每个对象都可以更改并保留该变量的值。

(这就是在ObjC中有时使用static变量来模拟其他语言中存在的类变量的原因。)