【问题标题】:How do I declare a global variable in Objective C如何在 Objective C 中声明一个全局变量
【发布时间】:2012-05-10 22:43:18
【问题描述】:

我已经查看了此处发布的大多数问题,但没有一个答案非常清楚,足以让我对全局变量充满信心。

我认为全局变量只是一个在中声明的变量

    @interface HelloWorldLayer : CCLayer
{
   //global variable goes here
    NSString *string;
}

现在我可以在任何方法中使用这个变量。

这是对还是我错了。

【问题讨论】:

标签: objective-c ios global-variables


【解决方案1】:

这不是一个“全局”变量。它是一个变量,仅可用作 HelloWorldLayer 对象的实例成员变量。 对于 xcode 中的全局变量,请参阅此解决方案 Global variable in Objective-C program

【讨论】:

    【解决方案2】:

    那不叫全局变量。它是一个实例变量。但是是的,您可以在 HelloWorldLayer 实现中的每个实例方法中访问它。

    【讨论】:

    • 对,那么实例变量和全局变量有什么区别。
    • @user996173 在编程之前你真的应该知道答案。 Global 变量在整个应用程序中都可以看到,instance 变量对于每个实例化的对象都是唯一的(每个已实例化的类都在内存中存储自己的副本)我相信有些大师会撕裂我的定义,但欢迎批评。
    【解决方案3】:

    如果你想在 HelloWorldLayer 之外访问它,你应该像这样创建一个属性

    HelloWorldLayer.h

    @interface HelloWorldLayer : CCLayer
    {
        NSString *string;
    }
    // Declare variable to be used outside the layer here
    @property(nonatomic, copy) NSString* string;
    @end
    

    HelloWorldLayer.m

    @implementation HelloWorldLayer
    @synthesize string; // This matches the property "string" with the variable "string"
    ...
    @end
    

    【讨论】:

    • 属性不再是全局变量,就像成员槽一样。
    【解决方案4】:

    请看here

    您创建一个静态变量并通过静态访问器使用它。附言您必须将存储静态变量 #import "staticVarClass.h" 的类导入到您需要使用的任何地方。

    【讨论】:

      【解决方案5】:

      要在 C# 中创建一个全局变量,如何做到这一点的答案在 Stackoverflow 上的另一篇文章中:Global variable in Objective-C program

      它说:

      对于标准全局变量,在应用程序终止和重新启动时不持久, 将此添加到您选择的头文件 (*.h) 中:

      extern NSInteger MYGlobalVariable; 
      

      然后把这个放到实现文件中(*.m, *.c, *.cpp):

      MYGlobalVariable = 0; // Or ny other default value.
      

      这就是你如何做一个基本的全局变量。

      祝你的项目好运。

      【讨论】:

        【解决方案6】:

        如果您想要一个 C 全局变量(可在整个应用程序中访问),您应该在任何接口声明或 .h 文件之外声明它,并且只在一个实现或 .c 文件中声明它。您必须在其他文件中将其声明为 extern 以使其在其他文件中可见。确保在声明中初始化它,因为默认情况下不会。

        请注意,以这种方式将 Objective C 对象指针(例如 NSString *)声明为 C 全局变量会增加最终生成不可重用或难以调试代码的机会。

        【讨论】:

          【解决方案7】:

          实际上,根据我的研发,我知道通过使用 extern 我们必须创建一个实例,但最后要做的是#define 你的变量,并且可以访问任何你想要的地方,而无需创建任何实例和其他东西,只需直接使用变量以它的名字....

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-03-30
            • 1970-01-01
            • 1970-01-01
            • 2011-03-22
            • 2011-02-12
            • 2012-11-11
            • 2019-09-11
            • 1970-01-01
            相关资源
            最近更新 更多