这是我的单身人士的代码
+ (ALData *)sharedInstance {
static ALData *_shared;
if(!_shared) {
static dispatch_once_t oncePredicate;
dispatch_once(&oncePredicate, ^ {
_shared = [[super allocWithZone:nil] init];
});
}
return _shared;
}
+ (id)allocWithZone:(NSZone *)zone { return [self sharedInstance]; }
- (id)copyWithZone:(NSZone *)zone { return self; }
#if (!__has_feature(objc_arc))
- (id)retain { return self; }
- (unsigned)retainCount { return UINT_MAX; }
- (void)release {}
- (id)autorelease { return self; }
#endif
现在,我见过的所有单身人士都是以这种方式被召唤的:
[[SINGLETON sharedInstance] instanceMethod];
但我想以这种方式打电话:
[SINGLETON classMethod];
要在创建方法时执行此操作,请执行以下操作:
+ (BOOL)decide:(BOOL)var {
[self sharedInstance];
if (var)
return NO;
else
return YES;
}
相反,如果我想以第一种方式继续,我必须以这种方式声明我的方法:
- (BOOL)decide:(BOOL)var {
if (var)
return NO;
else
return YES;
}
当我打电话给我时,我必须写:
[[SINGLETON sharedInstance] decide:YES];
我的问题是:这两种方法有什么区别?无论是在性能方面,还是在设计模式层面。
我想知道这一点,因为我认为美学上更好的方法是第二种,即不调用sharedInstance
的方法。
我希望我的问题很清楚
答案 0 :(得分:1)
Singleton
和带有一堆Class方法的Class之间的主要区别在于Singleton
可以保留某种状态。例如,数组数组或一些布尔标志。通过调用sharedInstance
,您可以访问此类的唯一实例,该类保持活动状态(并且数据的状态保留在那里)。你当然可以在你的单例类中添加一些类方法,它们可以工作,但你将转义Singleton
模式。
答案 1 :(得分:0)
创建一个返回共享实例的属性,然后调用它。
-(YourSingleton *)sharedStore
{
return [Singleton sharedInstance];
}
然后致电
[self.sharedStore decide:YES];