4

我想使用类变量。以下两种方法效果很好,但我不知道它们之间有什么不同。

static NSString *str1 = @"str1";
NSString *const str2 = @"str2";
@implementation StrViewController
4

2 回答 2

5

您可以将位置更改str1为指向的位置,但不能这样做,str2因为它是一个 const 指针

这将起作用:

str1 = @"Hello";

虽然这不会:

str2 = @"Hello"; 
于 2012-10-10T08:38:04.237 回答
1

我想你会发现你的变量不需要是staticor const!使它成为类变量的原因在于它在任何方法或函数之外。

尽管有这个名字,static但与静态无关(即保持不变)。这是一个非常不幸的术语选择,但它来自 C,我们坚持使用它。static与变量的范围有关;它在文件级别实现,在文件范围内但在任何特定方法/函数之外。它以两种方式使用:

  • 在任何方法或函数之外,static防止从该文件外部看到全局变量。请参阅从另一个类引用静态 NSString * const

  • 在方法或函数内部,static将存储与文件作为一个整体联系起来,而不是在方法或函数以“自动”变量的方式结束时使变量不存在。正如 C 语言的发明者自己所说(K&R 4.6):

与自动装置不同的是,它们始终存在,而不是在每次激活功能时来来去去。这意味着内部static变量在单个函数中提供私有的、永久的存储。

这就是为什么static在 class-vended singleton 的实现中使用它。

于 2012-12-12T18:03:18.347 回答