答案 0 :(得分:10)
Singleton-pattern的这种实现允许继承:
+ (instancetype)sharedInstance {
static dispatch_once_t once;
static NSMutableDictionary *sharedInstances;
dispatch_once(&once, ^{ /* This code fires only once */
// Creating of the container for shared instances for different classes
sharedInstances = [NSMutableDictionary new];
});
id sharedInstance;
@synchronized(self) { /* Critical section for Singleton-behavior */
// Getting of the shared instance for exact class
sharedInstance = sharedInstances[NSStringFromClass(self)];
if (!sharedInstance) {
// Creating of the shared instance if it's not created yet
sharedInstance = [self new];
sharedInstances[NSStringFromClass(self)] = sharedInstance;
}
}
return sharedInstance;
}
答案 1 :(得分:2)
你永远不会从Singleton类继承。这完全打破了单身人士的概念。
从同一个基类继承多个单例类:没有任何问题。事实上,大多数单身人士都有共同的超类NSObject,但你可以使用任何其他超类。
答案 2 :(得分:0)
是。我不确定你是否熟悉Obj-C单例模式,但这里有一个指南: http://www.galloway.me.uk/tutorials/singleton-classes/
子类化不应该有任何复杂性。只需创建单例的子类,它也将继承它的单例能力。我认为每个子类都会创建它自己的唯一单例,但如果没有,则覆盖单例生成器,因此它对于该子类是唯一的。
请记住,单身人士在iOS上不再受欢迎,因此应该谨慎使用它们。我尝试仅在尝试创建多个实例时才使用它们(即用于访问必须由类专门保留的硬件资源的类。)