(Cocoa)我可以同时进行子类和委派吗?

时间:2010-05-11 17:57:00

标签: cocoa inheritance delegates

@interface ClassB <ClassADelegate> : ClassA

id <ClassBDelegate> delegate;

@end

正如代码所说,ClassB是ClassA的子类,它处理类A的形成协议。但是,变量“delegate”将被复制。 (ClassA也有“代表”)

事实上,它可以在没有子类化的情况下完成,但似乎代码很麻烦,即使用ClassA的变量/函数,我需要编写[[ClassB classA] doSomething]而不是[classB doSomething], doSomething:是ClassA的一个功能。

我有什么整洁的方法吗?

1 个答案:

答案 0 :(得分:2)

在查看您发布的示例时,ClassB符合ClassADelegate协议,然后ClassB具有符合ClassBDelegate的委托对象。如果ClassB符合ClassADelegate并且也是ClassA子类,我很好奇为什么ClassADelegate方法不仅仅是ClassA的一部分。

因此,我将重新考虑此设置的体系结构,并尝试将模型对象和委托分开,这首先是委托模式的要点。如果这对您的应用程序没有意义,那么关于您的子类化要实现的内容的一些更具体的信息将会有所帮助。

在今天做一些工作时,我发现Apple确实使用了委托和子类,但绝对不是你提出的方式。看看NSTextField和NSControl类。 NSTextField当然是NSControl的子类,并且有自己的委托方法,但NSControl也有一组委托方法。但是NSTextField不符合NSControl的委托协议(事实上它并没有被指定为协议)。