gpt4 book ai didi

objective-c - Cocoa 单例和协议(protocol)

转载 作者:可可西里 更新时间:2023-11-01 05:47:15 26 4
gpt4 key购买 nike

我想定义一个协议(protocol)并创建一种简单、标准的方法来获取所述协议(protocol)的“默认”共享实现 - 单例样式。 Cocoa 遵循以下模式:

[NSUserDefaults standardUserDefaults]
[NSNotificationCenter defaultCenter]

但在这两种情况下,它们在对象层次结构的底部都有@interfaces。我正在努力研究如何使用@protocols 来做到这一点。我显然可以创建一个具有空方法实现或简单方法实现的类——但实际上,我想要的是层次结构底部的 @protocol。我试过类似的东西:

@protocol ConfigurationManager <NSObject>

//...

@interface ConfigurationManagerFactory : NSObject

+ (id<ConfigurationManager>)sharedConfiguration;

@end

// ...

id<ConfigurationManger> config = [ConfigurationManagerFactory sharedConfiguration];
[config ...];

它有效 - 但我总是不得不解释如何使用它以及我为什么这样做。有没有一种方法既能符合 Cocoa 的语法(调用约定),又能利用@protocols 的值(value)?

顺便说一句,我不想​​像这样使用@protocols 有什么原因吗?实现 @interface 仍然可以利用类别和替代实现等 - 就像实例化 NSString 通常为您留下一个扩展 NSString 的类一样。

最佳答案

这里有一个想法:创建您的协议(protocol)和一个具有相同名称的类,并使用一个工厂方法为您返回协议(protocol)的默认实现:

@protocol ConfigurationManager <NSObject> ...

@interface ConfigurationManager : NSObject <ConfigurationManager>
+(ConfigurationManager *) defaultConfigurationManager;
...

然后其他专门的实现可以从您的基类继承。

关于objective-c - Cocoa 单例和协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8856027/

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