静态变量“声明变量static将其范围限制为仅限于类 - 并且仅限于在文件中实现的类的部分”(Apple doc)。
我认为类扩展中定义的变量只有类定义它才有限制范围。
这是类似的!
类扩展中的静态变量和变量有什么不同?
答案 0 :(得分:7)
static
变量与其定义的文件相关联。它无法从该文件的外部访问,并且在整个程序中只为其创建了一个存储位置。
存储的区别也适用于非静态全局变量 - 程序中只有一个。
类扩展中的变量同样受限于其声明的文件的可见性,但它是实例变量。您创建的每个类的实例都附加了一个新的存储空间。
如果您创建一个static
变量并从该类的多个实例更改其值,则每个实例都将看到相同的值。 ivar不是这种情况 - 每个对象都可以更改并保留该变量的值。
(这就是在ObjC中有时使用static
变量来模拟其他语言中存在的类变量的原因。)