2012-05-10 181 views
-1

我想保存“dataFilePath”作为一个静态变量,以便它可以被初始化时第一次使用“常量”,无需实例化类,例如[常量SDataFilePath。但真正的原因是init方法没有被调用。我该怎么做才能满足我的要求? (在Java中,构造方法将被称为访问类的第一时间)。如何让静态变量初始化

@implementation Constants 

static NSString *dataFilePath; 

-(id)init 
{ 
    NSLog(@"init!"); 
    if(self = [super init]) { 
     dataFilePath = [self getDataFilePathWithArg:dbfile]; 
    }  
    return self; 
} 

+(NSString *)SDataFilePath { 
    return dataFilePath; 
} 
.... 
@end 

回答

1

那么你可以使常量单身。留下你的代码是怎么回事,这方法添加到.M:

+ (Constants *)sharedConstants 
{ 
    static Constants *_sharedConstants = nil; 
    static dispatch_once_t oncePredicate; 
    dispatch_once(&oncePredicate, ^{ 
     _sharedConstants = [[self alloc] init]; 
    }); 

    return _sharedConstants; 
} 

而且方法声明为.H:

+ (Constants *)sharedConstants; 

然后访问您的变量是这样的:

[[Constants sharedConstants] SDataFilePath] 

这会在第一次访问[Constants sharedConstants](并且仅在第一次)时强制init。此外,您需要将+(NSString *)SDataFilePath更改为实例方法,而不是类方法:

-(NSString *)SDataFilePath 
0

这不能这样做。为什么你想要这条路径是静态的?你可能想看看设置dataFilePath与getter,但没有setter和实例化类作为一个单身。这样你就可以通过一些内部方法来设置路径,并将实例作为单例共享。请参阅here