Я хочу определить протокол и создать простой, стандартный способ получить «общую» реализацию этого протокола в едином стиле.Какао придерживается следующего шаблона:
[NSUserDefaults standardUserDefaults]
[NSNotificationCenter defaultCenter]
, но в обоих случаях они имеют @interfaces внизу иерархии объектов.Я борюсь с тем, как сделать это с помощью @protocols.Очевидно, я могу создать класс с пустыми или простыми реализациями методов, но в действительности мне нужен @protocol в нижней части иерархии.Я пробовал что-то вроде:
@protocol ConfigurationManager <NSObject>
//...
@interface ConfigurationManagerFactory : NSObject
+ (id<ConfigurationManager>)sharedConfiguration;
@end
// ...
id<ConfigurationManger> config = [ConfigurationManagerFactory sharedConfiguration];
[config ...];
, и это работает - но мне всегда приходится объяснять, как использовать это и почему я сделал это таким образом.Есть ли способ соответствовать синтаксису Какао (соглашение о вызовах), в то же время используя значение @protocols?
Кроме того, есть ли причина, по которой я не хотел бы использовать @protocols, как этот?Реализация @interface все еще может использовать категории и альтернативные реализации, и т. Д. - так же, как создание экземпляра NSString обычно оставляет вам класс, расширяющий NSString.