【问题标题】:Objective c accessing a global variable from another file [duplicate]目标c从另一个文件访问全局变量[重复]
【发布时间】:2012-06-13 06:21:10
【问题描述】:

可能重复:
Global Variables in Cocoa/Objective-C?
problem with declare a global variable in objective c

我在 .h 中定义了一个全局变量,其他类通过包含类“.h”文件来访问该变量。这很好,根据我收到的建议,我现在已经将变量移动到“.m”,因为我被告知,否则每个包含 .h 的类都将重新声明它,这是正确的吗?但是现在我的其他文件无法访问它,并且我假设我不应该包含“.m”文件......我应该使用#define 预处理器,所以它只定义一次吗?我该怎么做?

【问题讨论】:

  • gave you你原来需要的信息;在标头中使用extern 声明相同的变量,并且在.m 文件中没有限定符。
  • 谢谢 Josh 知道了 :) 抱歉错过了。

标签: objective-c


【解决方案1】:

您可以在.h 文件中声明变量。

globals.h:

extern int myGlob;

您不能在.h 中定义变量,您必须在.c.m 中定义它:

globals.m:

int myGlob;

您可以从需要访问myGlob 的任何其他文件中导入globals.h

myApp.m:

#import "globals.h"

main() {
    myGlob++;
}

【讨论】:

    【解决方案2】:

    您可以在 .h 中使用 #define number 123#define string @"abc",并且任何导入它的文件都应该能够使用您选择的预处理器名称。 k 是这些类型宏的通用前缀,因为它们实际上是常量值。

    注意: cmets 表明使用您定义的预处理器和实际的全局变量(声明了 extern)之间存在差异,尽管两者都可以通过导入您所在位置的 .h 文件在单独的文件中使用声明/定义它们。

    【讨论】:

    • 那些不是变量;它们只是文本替换。这个答案确实不能解决 Baconbeastnz 的问题。
    • 我从未说过它们是变量,我将编辑我的答案以澄清这一点。答案确实涵盖了他询问是否适合使用#define 语句在文件之间定义一次的部分。
    • 您的回答是“它应该能够使用 变量 名称”。 Baconbeastnz 正在询问一个全局变量,该变量出现在今天的几个问题(12)中。
    • 根据问题更改我的答案,以及我认为有必要的澄清。我将略读其他问题并决定是否可以更好地回答这个问题,但#define 方法是执行@Baconbeastnz 在此特定问题的一部分中所询问的有效方法。
    【解决方案3】:

    静态变量只声明一次

    【讨论】:

      猜你喜欢
      • 2015-12-28
      • 2010-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-29
      • 1970-01-01
      相关资源
      最近更新 更多