所以,很简单的问题。忽略过度使用单例模式的影响。我试图在 Objective-C 中找到一个可靠的单例模式。我遇到过这个:
@implementation SomeSingleTonClass
static SomeSingleTonClass* singleInstance;
+ (SomeSingleTonClass*)getInstance
{
static dispatch_once_t dispatchOnceToken;
dispatch_once(&dispatchOnceToken, ^{
singleInstance = [[SomeSingleTonClass alloc] init];
});
return singleInstance;
}
- (void)someMethodOnTheInstance
{
NSLog(@"DO SOMET WORK")
}
@end
我对此很满意,但它导致了很多这样的情况:
[[SomeSingleTonClass getInstance] someMethodOnTheInstance];
我的问题是,为什么这比纯静态类更好。
@implementation SomeStaticClass
static NSString* someStaticStateVariable;
- (id)init
{
//Don't allow init to initialize any memory state
//Perhaps throw an exception to let some other programmer know
//not to do this
return nil;
}
+ (void)someStaticMethod
{
NSLog(@"Do Some Work");
}
您真正获得的只是看起来更干净的方法调用。基本上你换掉这个:
[[SomeSingleTonClass getInstance] someMethodOnTheInstance];
为了这
[SomeStaticClass someStaticMethod];
这肯定是一个小的简化,您始终可以将实例存储在您的类中。这更像是一种求知欲,我用静态类而不是单例来惹恼什么 Objective-C 上帝?我敢肯定我不能成为第一个想到这个的人,但我保证,我先做了重复搜索。我发现的几个答案,我觉得是基于旧版本的可可,因为即使是讨论过的单例模式似乎也存在线程问题。