【问题标题】:Objective C - Static and global variable?Objective C - 静态和全局变量?
【发布时间】:2011-04-27 07:01:18
【问题描述】:

在名为 Ad 的类的 .m 文件中,我有 3 个静态字符串

static NSString *AdStateDisabled = @"disable";
static NSString *AdStateExpired = @"expired";
static NSString *AdStateActive = @"active";

我可以在当前类中简单地使用这些静态变量,但我不能从任何其他类中调用它们,有没有办法让这些静态变量成为全局变量? 因此,例如在我的 viewcontroller 类中,我可以做类似的事情。

//HomeViewController.m
if ([self.ad.state isEqual:Ad.AdStateDisabled])
{
     //do something
}

【问题讨论】:

    标签: iphone objective-c global-variables static-variables


    【解决方案1】:

    您可以将以下声明添加到您的 HomeViewController.h 标头中,然后需要将其导入您想要访问字符串的任何位置。

    //HomeViewController.h
    extern NSString *AdStateDisabled;
    extern NSString *AdStateExpired;
    extern NSString *AdStateActive;
    

    然后更改您的定义以删除“静态”。

    //HomeViewController.m
    NSString *AdStateDisabled = @"disable";
    NSString *AdStateExpired = @"expired";
    NSString *AdStateActive = @"active";
    

    如果您不希望字符串的用户必须导入 HomeViewController.h,那么您也可以在 AdState.h 中定义这些字符串并将定义放入 AdState.m(并从 HomeViewController.m 中删除它们)之后,字符串的用户只需导入 AdState.h 即可使用字符串。

    【讨论】:

    • 嘿,我前段时间做了一个要点,不兼容 ARC,但它实际上可以通过使用分配方法并指定强或弱引用在 ARC 中使用。这有点接近原始问题的要求:gist.github.com/darionco/03649feeee57f86fee3f
    【解决方案2】:

    首先,去除静电。 C 和 Objective-C 中的静态变量和函数意味着它们仅对当前编译单元可见(或多或少:只有您在其中声明了 statix 变量的文件才能看到它)。

    接下来,您还需要在公共头文件中使用“extern”声明变量,例如与该类关联的类之一:

    extern NSString *AdStateDisabled;
    

    然后您也可以在其他文件中使用它们,但您不能以“Ad.AdStateDisabled”的形式访问它们,而只能以“AdStateDisabled”的形式访问它们。

    【讨论】:

      猜你喜欢
      • 2015-10-04
      • 2015-06-12
      • 2012-01-07
      • 1970-01-01
      • 1970-01-01
      • 2022-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多