【问题标题】:what's the different between const NSString and static NSStringconst NSString 和静态 NSString 有什么区别
【发布时间】:2012-10-10 08:34:29
【问题描述】:

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

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

【问题讨论】:

    标签: ios cocoa-touch


    【解决方案1】:

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

    这会起作用:

    str1 = @"Hello";
    

    虽然这不会:

    str2 = @"Hello"; 
    

    【讨论】:

    • 所以除了可变没有区别?
    • 不完全是。取决于范围。例如,在一个函数中,static 的初始化只进行一次(即使在多次调用该函数时),而 const 变量将在每次调用时初始化
    • @giorashc ,静态 NSString *const str2 = @"str2";
    • 在什么情况下?您无法更改 str2 指向的地址,因为 str2 是一个 const 指针
    【解决方案2】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-25
      • 2011-09-22
      • 1970-01-01
      • 2011-03-12
      • 2011-07-01
      • 1970-01-01
      相关资源
      最近更新 更多