我们可以实施协议吗?

时间:2012-12-28 03:26:36

标签: objective-c protocols

我想设置singletonProtocol。实现该协议的类将支持+(id)单例

显然我会实现那个单例方法。一次又一次地重复实施同样的事情是浪费。

我可以使用继承,我已经知道如何做,但是一个类只能有一个父级,并且使用继承听起来像是一种过度杀伤。基本上我只将单例存储在一个NSMutableDictionary中,其密钥是相应类的NSStringFromClass。我想知道为什么没有其他人这样做。这与我用于In Objective-c how can we have a variable whose scope is the whole class (but doesn't include subclasses)

的技术相同
#import "BGSuperSingleton.h"

static NSMutableDictionary * allTheSingletons;
@implementation BGSuperSingleton

+(id) singleton1
{
    NSString* className = NSStringFromClass([self class]);

    id result = allTheSingletons[className];

    if (result==nil)
    {
        result = [[[self class] alloc]init];
        allTheSingletons[className]=result;
    }
    return result;
}

@end

我可以使用类别。但是,类别适用于几乎所有类。我可以限制所有我的单身人士都属于SuperSingleton课程,但这会打败目的

我可以使用协议。现在那太棒了。但是,协议没有实现。协议只声明一个类可以做的方法。

那么,我该怎么办?

1 个答案:

答案 0 :(得分:3)

  

那么,我该怎么办?

你应该重新考虑你的设计。听起来您希望在许多不同的类中采用此协议,以便您可以拥有每个类的共享实例。这些对象真的需要是单身吗?共享对象和不得多次实例化的类之间存在差异。

考虑创建一个充当所有其他类的工厂的类。该类可以维护共享对象的字典,您可以简单地指出始终使用工厂来实例化其他类。实际上,您可以编写其他类,以便直接实例化它们会抛出异常或其他类。