Objective C - 静态和全局变量?

ary*_*axt 9 iphone global-variables objective-c static-variables

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

static NSString *AdStateDisabled = @"disable";
static NSString *AdStateExpired = @"expired";
static NSString *AdStateActive = @"active";
Run Code Online (Sandbox Code Playgroud)

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

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

ima*_*boy 18

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

//HomeViewController.h
extern NSString *AdStateDisabled;
extern NSString *AdStateExpired;
extern NSString *AdStateActive;
Run Code Online (Sandbox Code Playgroud)

然后更改您的定义以删除"静态".

//HomeViewController.m
NSString *AdStateDisabled = @"disable";
NSString *AdStateExpired = @"expired";
NSString *AdStateActive = @"active";
Run Code Online (Sandbox Code Playgroud)

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


Dar*_*ust 9

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

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

extern NSString *AdStateDisabled;
Run Code Online (Sandbox Code Playgroud)

然后,您也可以在其他文件中使用它们,但不能将它们作为"Ad.AdStateDisabled"访问,而是将其作为"AdStateDisabled"访问.