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

Dun*_*ton 3 objective-c static-variables class-extensions

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

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

那是类似的!

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

Jos*_*ell 7

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

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

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

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

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