gpt4 book ai didi

objective-c - 我们可以有实现协议(protocol)吗?

转载 作者:搜寻专家 更新时间:2023-10-30 20:10:07 25 4
gpt4 key购买 nike

我想设置一个单例协议(protocol)。实现该协议(protocol)的类将支持 +(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 类,但这会破坏目的

我可以使用协议(protocol)。这太棒了。但是,协议(protocol)没有实现。协议(protocol)仅声明类可以执行的方法。

那么,我该怎么办呢?

最佳答案

So, what should I do?

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

考虑创建一个类作为所有其他类的工厂。该类可以维护共享对象的字典,您可以简单地强调始终使用工厂来实例化其他类。事实上,您可以编写其他类,以便在实例化它们时直接抛出异常或其他东西。

关于objective-c - 我们可以有实现协议(protocol)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14064199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com