【问题标题】:iPhone Global Variable?iPhone 全局变量?
【发布时间】:2010-08-30 14:36:54
【问题描述】:

当然,我有两个视图,它们都有自己的 .h 和 .m 文件。如何在一个视图中声明一个布尔值(或任何变量)并在另一个视图中访问它?

谢谢。

【问题讨论】:

  • 需要更多信息,它们是导航控制器中的视图吗?还是它们只是类?
  • 抱歉,在导航控制器中查看。
  • 阅读以下链接中的答案,它清楚地解释了stackoverflow.com/a/20423815/730807

标签: iphone objective-c global-variables


【解决方案1】:

Objective C 是普通 ANSI C 的超集,因此您可以像在老式 C 中一样创建和使用全局变量。

在一个 .m 或 .c 文件中,放入:

BOOL gMyGlobalBoolVar = NO;  // or YES, depending on whatever initial state is needed

我可能会将它们放在一个集中的单例类中,例如您的 appdelegate .m 文件,或者放在一个单独的 .c 文件中,例如 myGlobals.c。我通常将它们放在 #imports/includes 之后,但在任何类、方法或函数定义之前,以阐明它们可以在任何对象或函数之外访问。

在要访问 gMyGlobalBoolVar 的所有类的 .h 文件中,输入:

extern BOOL gMyGlobalBoolVar;

然后在课堂的任何地方使用它们:

if ( [ self dogHasFleas ] ) { 
  gMyGlobalBoolVar = YES; 
}

全局变量的使用目前在“政治上不正确”,但是对于您永远不会尝试发布、重用、扩展或寻找棘手错误的快速代码,它们可以像在几乎每台计算机上一样正常工作,并且50 多年前的编程语言。

【讨论】:

  • 我很困惑为什么他们如此对抗。我确实计划发布这个应用程序,所以最好让它整洁、快速、简洁。如果我真的需要全局访问这个变量,那么有什么好的选择呢?
【解决方案2】:

您可以只引用包含布尔值的视图并使用 getter 获取变量。

如果您想要应用范围的变量,可以将它们放在 AppDelegate 中,但我强烈建议不要这样做,因为它会紧密耦合类。

【讨论】:

    【解决方案3】:

    创建一个数据模型类。在您的应用程序委托中实例化它,并将其传递给您的视图控制器。使用 Key-Value Observing 跟踪视图控制器中模型的更改。在这里查看我的答案:How do I display and calculate numbers from a database on iPhone?

    “为什么我不应该使用全局变量?它不能只伤害一次。”这是一个不好的习惯。避免使用全局变量使您的代码更易于阅读和重用、更易于扩展和更易于调试。

    【讨论】:

      猜你喜欢
      • 2011-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-17
      • 2015-06-12
      • 2019-07-24
      • 2017-11-08
      • 1970-01-01
      相关资源
      最近更新 更多