【问题标题】:iPhone Development: Global VariablesiPhone 开发:全局变量
【发布时间】:2011-11-14 04:36:30
【问题描述】:

我对 Objective-C 很陌生。我需要创建一个全局变量。我有文件 abc.h、abc.m、aaa.h、aaa.m,当然还有应用程序委托。

我想在 abc.h 中声明它,使用让用户在 abc.m 中分配它并在 aaa.m 中使用它。 我希望变量是一个名为 x 的整数。我听说我可以以某种方式使用 App Delegate。 我希望在我的代码中间实现 abc.m 中的分配变量。 由于我是新人,请简单一点!!

提前致谢!

【问题讨论】:

标签: iphone objective-c xcode integer global-variables


【解决方案1】:

我建议创建您自己的单例类,以避免混淆 UIApplication 委托。它还使您的代码更整洁。继承 NSObject 并添加如下代码:

static Formats *_formatsSingleton = nil;
+ (Formats*) shared
{
    if (_formatsSingleton == nil)
    {
        _formatsSingleton = [[Formats alloc] init];
    }
    return _formatsSingleton;
}

根据需要将 ivars 和属性添加到此类。您可以在 init 方法中设置默认值,例如

- (id) init;
{
    if ((self = [super init]))
    {
        _pgGlobalIntA = 42;   // ivar for an int property called globalInt
        _pgGlobalStringB = @"hey there";   // ivar for an NSString property called globalStringB
    }
    return self;
}

然后设置和访问你会使用:

 [[Formats shared] setGlobalIntA: 56];
 NSLog(@"Global string: '%@'", [[Formats shared] globalStringB]);

类方法shared 会创建该类的一个实例(如果该实例尚不存在)。所以你不必担心创建它。它只会在您第一次尝试访问或设置一个全局变量时发生。

【讨论】:

    【解决方案2】:

    我建议您创建自己的单例类,而不是把所有的负担都放在 AppDelegate 中,然后在您想使用的任何地方使用它。下面是创建单例类的示例:http://www.71squared.com/2009/05/iphone-game-programming-tutorial-7-singleton-class/

    【讨论】:

      【解决方案3】:

      您可以在应用程序委托中使用属性,因为您始终可以通过以下方式获取应用程序委托实例:

      [ [ UIApplication sharedApplication ] delegate ]
      

      所以:

      /* AppDelegate.h */
      @interface AppDelegate: NSObject < UIApplicationDelegate >
      {
          int x;
      }
      @property( readonly ) int x;
      @end
      
      /* AppDelegate.m */
      #import "AppDelegate.h"
      @implementation AppDelegate
      @synthesize x;
      @end
      

      这样,您就可以使用:

      [ [ [ UIApplication sharedApplication ] delegate ] x ]
      

      另一种方法是使用全局变量,在 abc.h 文件中声明为 extern,并在 abc.m 文件中定义。

      /* abc.h */
      extern int x;
      
      /* abc.m */
      int x = 0;
      

      这样,其他文件只能通过包含 abc.h 才能访问 x。 extern 告诉编译器该变量将在稍后定义(例如在另一个文件中),并将在链接时解析。

      【讨论】:

      • 感谢 MacMade,(只读)是什么意思,以及如何使用 [ [ [ UIApplication sharedApplication ] delegate ] x ]?以及如何包含 abc.h?
      • 如果你不知道,那么你真的应该看看基本的 Objective-C 文档......
      猜你喜欢
      • 1970-01-01
      • 2021-08-14
      • 1970-01-01
      • 1970-01-01
      • 2012-04-15
      • 1970-01-01
      • 1970-01-01
      • 2015-11-18
      • 1970-01-01
      相关资源
      最近更新 更多