可以在iOS中实现Singleton继承

时间:2015-07-04 06:57:33

标签: ios design-patterns singleton

我有几个类应该从一些A类继承。 他们每个人都应该是一个单身人士。 这可以实现吗?

3 个答案:

答案 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上不再受欢迎,因此应该谨慎使用它们。我尝试仅在尝试创建多个实例时才使用它们(即用于访问必须由类专门保留的硬件资源的类。)