iPhone开发:全局变量

时间:2011-09-10 00:33:03

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

我是Objective-C的新手。我需要创建一个全局变量。我有文件abc.h,abc.m,aaa.h,aaa.m,当然还有应用代表。

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

提前致谢!

3 个答案:

答案 0 :(得分:4)

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

[ [ 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告诉编译器该变量将在以后定义(例如在另一个文件中),并且它将在链接时解析。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

我建议您创建自己的单例类,以避免混淆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创建类的实例(如果已经存在的话)。所以你不必担心创建它。它会在您第一次尝试访问或设置一个全局变量时发生。