可由任何类访问的全局变量

时间:2012-03-16 16:13:48

标签: objective-c ios xcode global-variables

我想创建一个全局变量(基本上是一个标志var),它可以被Objective C中的任何类修改和访问?任何例子都表示赞赏。

4 个答案:

答案 0 :(得分:2)

单身人士模式。

http://www.galloway.me.uk/tutorials/singleton-classes/

始终通过“sharedManager”消息引用该对象,该消息将创建一个新对象或为您提供现有对象。

答案 1 :(得分:2)

Objective C是ANSI C的严格超集,因此用于创建和使用普通C全局变量的步骤可以在Objective C中使用。

在一个.m文件中,在任何类接口,方法或子例程范围之外,声明或实例化您的全局变量(如果您不希望它以垃圾值开头,则初始化它):

BOOL myGlobalFlag = NO;

为了使这些全局变量易于查找(您可能需要找到它们,因为全局变量的使用被认为更有可能涉及某些类型的错误),请将它们放在文件的顶部,在任何必要的包括之后。或者将所有全局变量放在一个易于查找的中心文件中,例如App Delegate,包含main()的文件,或仅包含所有全局变量的文件,例如项目中包含的my_apps_globals.c。

在属于任何类,.m或.c文件的至少一个.h文件中,如果要访问此变量,并且在任何类接口或结构定义之外,请将此变量声明为可从外部访问:

extern BOOL myGlobalFlag;

然后在应用程序的任何位置使用任何方法或子例程中的变量,其中包含上述任何头文件。

-(void)dummyMethod {
  if (myGlobalFlag) NSLOG(@"the Flag is set!!!");
}

答案 2 :(得分:1)

请记住,Objective-C有很好的旧“C”在幕后运行。因此,您可以像在C中一样在Objective-C中创建一个全局变量。

答案 3 :(得分:1)

检查一下。在appname.pch文件中导入一些类,比如应用程序委托,因为它很容易从应用程序单例访问。像那样添加一个脚本

#define MY_APP_DELEGATE  (((MYAppDelegate *)[UIApplication sharedApplication].delegate))

并且从任何类以这种方式使用委托变量:

int val1 = MY_APP_DELEGATE.myvar;
MY_APP_DELEGATE.myvar = 1;