Iphone 如何初始化静态变量
我想将“dataFilePath”保存为一个静态变量,以便在第一次使用“常量”时可以对其进行初始化,而无需实例化该类,例如[Constants SDataFilePath]。但实际情况是没有调用init方法。我怎样才能满足我的要求?(在Java中,构造方法将第一次被调用以访问该类)Iphone 如何初始化静态变量,iphone,objective-c,static,Iphone,Objective C,Static,我想将“dataFilePath”保存为一个静态变量,以便在第一次使用“常量”时可以对其进行初始化,而无需实例化该类,例如[Constants SDataFilePath]。但实际情况是没有调用init方法。我怎样才能满足我的要求?(在Java中,构造方法将第一次被调用以访问该类) 你可以把常数变成一个单子。保留您的代码,并将此方法添加到.m: + (Constants *)sharedConstants { static Constants *_sharedConstants = n
你可以把常数变成一个单子。保留您的代码,并将此方法添加到.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
这不能这样做。你为什么希望这个路径是静态的?您可能希望使用getter设置dataFilePath,但不使用setter,并将该类实例化为单例。这样,您就可以通过一些内部方法来设置路径,并将实例作为单个实例共享。看
-(NSString *)SDataFilePath