Iphone 目标C中的全局变量

Iphone 目标C中的全局变量,iphone,objective-c,global-variables,Iphone,Objective C,Global Variables,我在appdelegate类中加载了几个变量。它们在my.h文件中声明 我有一个global.h文件,它声明了与extern相同的变量,例如: appdelegate.h 全球 我还没有找到模式,但是我包含的一些类是global.h,但是var是nil 知道我做错了什么吗 编辑: 看起来像是这样的变量: int x; 可以使用斗杆和斗杆, 但是作为指针的变量丢失了: NSString *Name; 它们最初都是从appdelegate中的DB加载的 我也试过申报 char Name[30];

我在appdelegate类中加载了几个变量。它们在my.h文件中声明

我有一个
global.h
文件,它声明了与
extern
相同的变量,例如:

appdelegate.h 全球 我还没有找到模式,但是我包含的一些类是
global.h
,但是var是nil

知道我做错了什么吗

编辑: 看起来像是这样的变量:

int x;
可以使用斗杆和斗杆, 但是作为指针的变量丢失了:

NSString *Name;
它们最初都是从appdelegate中的DB加载的

我也试过申报

char Name[30];
然后分配它,一切都好

现在怎么办?

在a.h中:

 extern NSString *global;
上午某个时候:

 NSString *global = @"foobar";
如果需要在运行时设置全局值,则必须在某个地方的方法中进行设置;比如说,
ApplicationIDFinishLaunching:


在NSString案例中,您将在何处分配给全局变量?当你这样做的时候,你是否保留了价值?你说的“迷失”是什么意思


请注意,变量不能在.h中声明;extern位于.h中,
NSString*global必须在一个且只有一个.m文件中。

您使用的是哪种类型的变量?它们是原语还是对象?如果它们是原语,您可能会考虑预处理器定义语句,而不是全局变量

如果它们是对象,则可能需要创建全局类的实现,并使用单例实例来服务和设置变量。类似的东西

@implementation Global
static Global *myGlobal = nil;

+(Global *)sharedInstance
{
    if (myGlobal == nil) {
         myGlobal = [[self alloc] init];
    }
    return myGlobal;
}

@end
然后,您可以使用以下方法调用变量:

[[Global sharedInstance] variableName]  

问题是没有保留这些字符串@仙里奇在上面的评论中提出了这一点。我改变了几个全局字符串,现在一切都好了


谢谢大家的帮助

请查看上面我添加的初始消息。看来问题出在指针上。比如NSString*名称;如果您只有一个.h文件,并且在其中定义了NSString,那么应该创建一个.m文件。您不必使用singleton实例,但是对于这些对象,您需要定义它们。我建议您为每个对象添加以下内容:Class*variable=nil;。例如,将NSString*DBName=nil;在你的.m文件中。我这样做了,但我认为我需要“保留”NSString。我该怎么做?通常在初始化变量时会保留这一点。在某个地方,对于字符串,您正在声明DBName=[[NSString alloc]init];。如果要声明DBName=[NSString initWithString:(NSString*)aString]或另一个助手初始值设定项,则在声明NSString时会为其分配自动释放,并在循环中释放。初始化字符串时应该使用[[alloc]init]。是的,我确实在主应用程序委托中加载了变量。他们在那里很好。请参阅附加注释above@MarkWorsnop:你的问题是你把变量放在“appdelegate.h”中,而bbum建议把它放在“a.m文件的某个地方”。我确实在.m中设置了值,但我发现了上面评论中的“retain”。我没有特别告诉它要保留这些值,也许这就是问题所在?我该怎么做?我确实已经看过了,但我无法通过编译错误,所以放弃了。我想这很简单,但是编译器不喜欢它??为什么不是零呢?你把它放在哪里?
@implementation Global
static Global *myGlobal = nil;

+(Global *)sharedInstance
{
    if (myGlobal == nil) {
         myGlobal = [[self alloc] init];
    }
    return myGlobal;
}

@end
[[Global sharedInstance] variableName]