全局变量问题

时间:2010-04-27 09:39:58

标签: iphone objective-c

我在global.h文件中定义了一个全局变量标志,当我点击下一个标签栏然后我无法访问标志值。我想要一个全局变量用于所有tabs.please建议我。

4 个答案:

答案 0 :(得分:5)

如果您想要一个全局变量,可以尝试以下选项:

1)在global.h中定义静态变量。例如。如果你想拥有一个NSString全局变量,请在global.h中声明以下内容:

@interface global : NSObject {

}
+(NSString*)MY_STR;

@end

然后在global.m中将其实现为static:

static NSString* MY_STR;

@implementation global

+(void) initialize
{

MY_STR = @"global string";      

}

+(NSString*)MY_STR{
    return MY_STR;
}

然后在任何需要此变量的类中,您可以导入global.h并按如下方式访问它:

[global MY_STR];

2)在这种方法中,定义单例类并使用其属性。 您可以将全局创建为单例类。在global.h中声明一个静态getInstance方法:

@interface global : NSObject{
  NSString *MY_STR;
}
@property(nonatomic, retain) NSString *MY_STR;
+(global*)getInstance;
@end

在global.m中,声明一个静态sharedInstance:

@implementation global

@synthesize MY_STR;

static global *g;

+(global*)getInstance{
    @synchronized([global class]){
        if(g == nil){
            g = [[global alloc] init];
        }
    }
    return g;   
}

@end

在任何需要访问MY_STR的类中,导入global.h并编写以下内容:

global *g1= [global getInstance];
g1.MY_STR;

3)第三种方法是在app delegate中声明变量并访问它们。

答案 1 :(得分:2)

用于(非客观)c方法:

在global.h中

extern int flag;

在global.m

int flat;

在任何其他.m或.c

#import "global.h"

flag = 123; // set
int abc = flag; // get

答案 2 :(得分:0)

您是否已将此文件包含在要使用此标志的位置?

答案 3 :(得分:0)

为每个标签的点击事件使用Getter和Setter方法。

-(void)setTitle:(NSString *)newTitle {

    if (instanceVar != newTitle) {
    [instanceVar release]; 
    instanceVar = [newTitle copy];
    // or retain, depending on object & usage
    }
 }


 -(NSString *)title {

       return [[instanceVar retain] autorelease];
     }