【发布时间】:2012-10-10 08:34:29
【问题描述】:
我想使用类变量。以下两种方法效果很好,但我不知道它们之间有什么不同。
static NSString *str1 = @"str1";
NSString *const str2 = @"str2";
@implementation StrViewController
【问题讨论】:
标签: ios cocoa-touch
我想使用类变量。以下两种方法效果很好,但我不知道它们之间有什么不同。
static NSString *str1 = @"str1";
NSString *const str2 = @"str2";
@implementation StrViewController
【问题讨论】:
标签: ios cocoa-touch
您可以将位置更改为str1 指向的位置,但不能对str2 执行相同操作,因为它是一个常量指针
这会起作用:
str1 = @"Hello";
虽然这不会:
str2 = @"Hello";
【讨论】:
我想你会发现你的变量不必是static 或const!使它成为类变量的原因在于它在任何方法或函数之外。
尽管有这个名字,static 与静态无关(即保持不变)。这是一个非常不幸的术语选择,但它来自 C,我们坚持使用它。 static 与变量的作用域有关;它在文件级别实现,在文件范围内但在任何特定方法/函数之外。它有两种使用方式:
在任何方法或函数之外,static 会阻止从该文件外部看到全局变量。见Referencing a static NSString * const from another class。
在方法或函数内部,static 将存储与文件作为一个整体联系起来,而不是在方法或函数以“自动”变量的方式结束时使变量不存在。正如 C 的发明者自己所说的(K&R 4.6):
与自动装置不同,它们会在每次激活功能时保持存在而不是来来去去。这意味着内部
static变量在单个函数中提供私有的永久存储。
这就是为什么static 用于实现类出售的单例。
【讨论】: