3

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

而且我认为在类扩展中定义的变量仅在定义它的类中具有限制范围。

那是相似的!

类扩展中的静态变量和变量有什​​么区别?

4

1 回答 1

7

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

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

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

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

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

于 2013-05-05T08:06:26.440 回答