Итак, довольно простой вопрос. Игнорирование последствий чрезмерного использования одноэлементного шаблона. Я пытаюсь найти надежный однотонный patter в 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 бог, я писаю, используя статические классы вместо синглтонов? Я уверен, что я не могу быть первым, кто думает об этом, но я обещаю, что сначала сделал двойной поиск. Несколько ответов, которые я нашел, я чувствовал, что они были основаны на более старых версиях cocoa, потому что даже обсуждаемые шаблоны одноэлементных, казалось, страдали от проблем с потоками.