-1

我想将“dataFilePath”保存为静态变量,以便在第一次使用“Constants”时对其进行初始化,而无需实例化 Class,例如 [Constants 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
4

2 回答 2

1

好吧,您可以将 Constants 设为单例。保留您的代码原样并将此方法添加到 .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] 时强制执行初始化(并且仅是第一次)。此外,您需要将 +(NSString *)SDataFilePath 更改为实例方法,而不是类方法:

-(NSString *)SDataFilePath
于 2012-05-10T04:11:04.047 回答
0

这不能通过这种方式完成。为什么你希望这条路径是静态的?您可能希望研究使用 getter 设置 dataFilePath,但不使用 setter 并将类实例化为单例。这样,您可以通过某种内部方法设置路径并将实例共享为单例。看这里

于 2012-05-10T04:17:12.187 回答