我有一个适用于我的桌面应用程序的插件体系结构。我使用Apple's code loading guide以相当标准的方式实现了它。可可插件模式
我有一个单独的协议,其定义了所有的插件的一个实例可以或应该响应的方法。
唯一的问题是这种协议定义了大约80的方法。这些方法中只有大约10种是强制性的,其余的都是可选的。一些插件将实现所有80个方法,而其他插件将只实现基本10.其他插件仅实现基本10.通过Info.plist文件中的NSPrincipalClass
键,插件束通常会告知其主机应用程序实例化哪个类。这是一个单一的键,所以只有一个类可以被实例化。
插件协议是一个单一的文件和其期望其将通过此单一类使用。
我的问题是:将单个协议内部的功能拆分为多个协议的最佳方式是什么,同时允许插件编写器具有更灵活的实现?
目前我现有的插件在其主类中的以下内容:
- (BOOL)respondsToSelector:(SEL)selector {
return [self forwardingTargetForSelector:selector] ? YES : NO;
}
- (id)forwardingTargetForSelector:(SEL)selector {
id target = nil;
if ([self.instanceOne respondsToSelector:selector]) {
target = self.instanceOne;
} else if ([self.instanceTwo respondsToSelector:selector]) {
target = self.instanceTwo;
} else if ([self.instanceThree respondsToSelector:selector]) {
target = self.instanceThree;
}
return target;
}
但是,而不是强加它在插件作家像这样定义一个特设系统,我想应用程序的插件框架,以适应更灵活的解决方案。