【问题标题】:Global variable which can be accessed by any class任何类都可以访问的全局变量
【发布时间】:2012-03-16 16:13:47
【问题描述】:

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

【问题讨论】:

标签: objective-c ios xcode global-variables


【解决方案1】:

单例模式。

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

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

【讨论】:

  • 谢谢史蒂文。这很有帮助。
【解决方案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!!!");
}

【讨论】:

    【解决方案3】:

    请记住,Objective-C 隐藏着运行良好的旧“C”。所以你可以像在 C 中一样在 Objective-C 中创建一个全局变量。

    【讨论】:

      【解决方案4】:

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

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

      任何类都以这种方式使用委托变量:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-08-16
        • 1970-01-01
        • 2021-11-12
        • 2016-09-15
        • 1970-01-01
        相关资源
        最近更新 更多