我想使用类变量。以下两种方法效果很好,但我不知道它们之间有什么不同。
static NSString *str1 = @"str1";
NSString *const str2 = @"str2";
@implementation StrViewController
我想使用类变量。以下两种方法效果很好,但我不知道它们之间有什么不同。
static NSString *str1 = @"str1";
NSString *const str2 = @"str2";
@implementation StrViewController
您可以将位置更改str1
为指向的位置,但不能这样做,str2
因为它是一个 const 指针
这将起作用:
str1 = @"Hello";
虽然这不会:
str2 = @"Hello";
我想你会发现你的变量不需要是static
or const
!使它成为类变量的原因在于它在任何方法或函数之外。
尽管有这个名字,static
但与静态无关(即保持不变)。这是一个非常不幸的术语选择,但它来自 C,我们坚持使用它。static
与变量的范围有关;它在文件级别实现,在文件范围内但在任何特定方法/函数之外。它以两种方式使用:
在任何方法或函数之外,static
防止从该文件外部看到全局变量。请参阅从另一个类引用静态 NSString * const。
在方法或函数内部,static
将存储与文件作为一个整体联系起来,而不是在方法或函数以“自动”变量的方式结束时使变量不存在。正如 C 语言的发明者自己所说(K&R 4.6):
与自动装置不同的是,它们始终存在,而不是在每次激活功能时来来去去。这意味着内部
static
变量在单个函数中提供私有的、永久的存储。
这就是为什么static
在 class-vended singleton 的实现中使用它。