const NSString和static NSString之间有什么不同

时间:2012-10-10 08:34:30

标签: ios cocoa-touch

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

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

2 个答案:

答案 0 :(得分:5)

您可以将位置更改为str1所指向的位置,但不能对str2执行相同操作,因为它是一个常量指针

这将有效:

str1 = @"Hello";

虽然这不会:

str2 = @"Hello"; 

答案 1 :(得分:1)

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

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

  • 在任何方法或函数之外,static会阻止从此文件外部看到全局变量。请参阅Referencing a static NSString * const from another class

  • 在方法或函数内部,static将存储整体绑定到文件,而不是当方法或函数以“自动”变量的方式结束时变量不存在。正如C的发明者自己所说的那样(K& R 4.6):

  

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

这就是为什么static用于实现类出售单身的原因。