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