Если то, что вы ищете, это быстрый способ установки новых синглетонов. Этот псевдо-абстрактный одноэлементный базовый класс я использую:
Многоразовый базовый класс
H
#define CREATE_SHARED_INSTANCE \
+ (instancetype)sharedInstance { \
static dispatch_once_t once; \
static id instance = nil; \
dispatch_once(&once, ^{ \
instance = [[self alloc] init]; \
}); \
return instance; \
}
@interface SharedObject : NSObject
+ (instancetype)sharedInstance;
@end
M
@implementation SharedObject
+ (instancetype)sharedInstance {
[NSException raise:@"Call to unimplemented sharedInstance" format:@"%@ does not implement sharedInstance.", NSStringFromClass([self class])];
return nil;
}
@end
Тогда каждый подкласс
H
#import "SharedObject.h"
@interface SomeSubclass : SharedObject
@end
M
@implementation SomeSubclass
CREATE_SHARED_INSTANCE
@end
... и использовать как любой синглтон.
[[SomesSubclass SharedInstance] someMethod];
Если вы вызовете абстрактный базовый класс или забудете включить CREATE_SHARED_INSTANCE
в свой подкласс, вы получите дружественное исключение.
Таким образом, вы можете легко устанавливать новые синглтоны без потери производительности.