在Objective-C中,如何声明/使用全局变量?

5
我已经研究了这个问题很长时间,但似乎找不到答案。我对 iPhone 编程还比较新手,如果这是一个愚蠢的问题,请原谅。如果有人可以提供具体的代码来展示如何实现,那将非常有帮助。

1
哈哈...在谷歌上找到了这个!巧合! - MCKapur
3个回答

9

Objective-C是C语言的超集,所以只需按照C语言的方式进行操作:

int globalX = 100;

还有头文件:

extern int globalX;

那么 int globalX = 100; 应该放在哪里呢?如果这是个愚蠢的问题,我很抱歉 :) - futurevilla216
不要傻,它应该放在你的.m文件中@implementation块的外面。 - D.C.
@hotpaw2,我不想太技术化,但我将它们放在了@implementation块之外,因为它们实际上并不属于该类(我猜你可以用它们来模拟类变量)。但是,是的,它们几乎可以放在任何地方。 - D.C.
@Abizern 我也是这样做的,这是一个相当不错的编程习惯(当需要很多全局变量时,能使你的代码更有组织性)。 - futurevilla216
@darren - 是的,我通过在我的实现块中实例化静态全局变量来模拟简单的类变量(并且每个文件使用一个实现块,以便文件作用域等于类定义作用域)。 - hotpaw2
显示剩余2条评论

2

你可以像在C语言中一样来完成它。这里有一个简单的例子:

int myGlobal = 3;

我不懂任何C语言...但是你会把那个声明放在哪里使它成为全局变量呢? - futurevilla216
那你为什么还要费心学习Objective-C呢?它只是带有对象的C语言。在能够有效地使用Objective-C之前,你需要了解C语言。 - Jonathan Grynspan
我开始学习Objective-C是通过一本书,这本书假定你完全是新手,基本上从教授C语言的基础知识开始。 - futurevilla216
在 @implementation A 上方将翻译后的文本放置到 .m 文件顶部 - Enrico Susatyo
@Carl Norum:好的,我只是想确保我理解了所有内容。为了使全局变量可供其他类访问,我需要导入具有全局变量的类,并在想要使用变量的类的头文件中键入extern(我的变量),对吗? - futurevilla216
显示剩余5条评论

1
希望这个回答更清晰。在我的情况下,我想创建一个全局类,但是:
我不想:
[GlobalResource shareInstance].bgrMenuFileName;

我想要:

R.bgrMenuFileName

像这样做一些事情! 在GlobalResource.h文件中:

@class GlobalResource;

extern GlobalResource * R;

@interface GlobalResource: NSObject
+ (void) loadGlobalResources;
@end

在 GlobalResource.m 文件中:
// you must redeclare R 
GlobalResource *R;
// then init it

@implementation GlobalResouce
+ (void) loadGlobalResources
{
     R = [[GlobalResource alloc] init];
}
- (id)init
{
     self = [super init];
     if (self) {
          // your init
     }
     return self;
}
@end

然后,在您的应用程序加载时调用loadGlobalResources:

[GlobalResource loadGlobalResources];

并将其导入到Prefix.pch中,以便在项目中随时使用R。

#import "GlobalResource.h"

使用它:

CCSprite *s = [CCSprite spriteWithFile:R.bgrMenuFileName];
//...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接