Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何初始化静态变量_Iphone_Objective C_Static - Fatal编程技术网

Iphone 如何初始化静态变量

Iphone 如何初始化静态变量,iphone,objective-c,static,Iphone,Objective C,Static,我想将“dataFilePath”保存为一个静态变量,以便在第一次使用“常量”时可以对其进行初始化,而无需实例化该类,例如[Constants SDataFilePath]。但实际情况是没有调用init方法。我怎样才能满足我的要求?(在Java中,构造方法将第一次被调用以访问该类) 你可以把常数变成一个单子。保留您的代码,并将此方法添加到.m: + (Constants *)sharedConstants { static Constants *_sharedConstants = n

我想将“dataFilePath”保存为一个静态变量,以便在第一次使用“常量”时可以对其进行初始化,而无需实例化该类,例如[Constants SDataFilePath]。但实际情况是没有调用init方法。我怎样才能满足我的要求?(在Java中,构造方法将第一次被调用以访问该类)


你可以把常数变成一个单子。保留您的代码,并将此方法添加到.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