我是Objective-C的新手。我需要创建一个全局变量。我有文件abc.h,abc.m,aaa.h,aaa.m,当然还有应用代表。
我想在abc.h中声明它,使用用户在abc.m中分配它并在aaa.m中使用它。 我希望变量是一个名为x的整数。我听说我可以以某种方式使用App Delegate。 我希望abc.m中的赋值变量在我的代码中间实现。 因为我是新手,请简单!!
提前致谢!
答案 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
创建类的实例(如果已经存在的话)。所以你不必担心创建它。它会在您第一次尝试访问或设置一个全局变量时发生。