Nomaly 我曾经用以下配方构建一个单例:
+ (MyClass *)sharedInstance
{
static MyClass *_sharedInstance = nil;
static dispatch_once_t oncePredicate;
dispatch_once(&oncePredicate, ^{
_sharedInstance = [[self alloc] init];
// Init variables
});
return _sharedInstance;
}
然后我可以调用如下方法:
[[MyClass sharedInstance] anyInstanceMethod];
但是,当任何初始化变量都可以从类外部配置时会发生什么?我的方法是创建两个类方法,其中一个带有可配置变量:
+ (MyClass *)sharedInstanceWithVariableOne:(NSString*)aParamOne andVariableTwo:(NSString*)aParamTwo
{
static MyClass *_sharedInstance = nil;
static dispatch_once_t oncePredicate;
dispatch_once(&oncePredicate, ^{
_sharedInstance = [[self alloc] init];
// Init configurables variables
_sharedInstance.paramOne = aParamOne;
_sharedInstance.paramTwo = aParamTwo;
});
return _sharedInstance;
}
第二个作为最后一个的代理,具有默认值:
+ (MyClass *)sharedInstance
{
return [MyClass sharedInstanceWithVariableOne:@"value1" andVariableTwo:@"value2"];
}
所以,如果你想使用带有配置变量的单例类,你应该首先调用sharedInstanceWithVariableOne:andVariableTwo
,然后只调用sharedInstance
. 我认为这种方法不是最好的,我期待使用其他方法。
提前致谢。