Objective-c中的多重继承已经制作了超类

时间:2011-09-28 20:46:24

标签: iphone objective-c inheritance

假设我想创建包含2个超类的视图控制器类; UIViewController和UIView。

这可能吗?还是有另一种方式绕过这个?

3 个答案:

答案 0 :(得分:3)

Objective-C不支持多重继承(希望因为多重继承通常是糟糕设计的同义词,并且还会导致钻石问题等潜在的复杂问题)。

如果您需要“通用编程接口”的概念(多个类的通用API),请使用协议

注意使ViewController继承UIView无论如何,因为这根本不是同一个对象,而是 MVC模式的单独部分。 (UIViewController位于“Controller”部分,可能包含行为内容,而UIView是“View”部分而不是Controller部分,只需要管理你的东西的显示/可见表示。)


显然有一些对MVC模式的误解(在Cocoa框架中无处不在),我建议你花点时间阅读更多关于MVC的内容。如果你是OOP的新手,这在开始时可能并不简单,但这是值得理解的,因为一旦你完全理解它就会更容易。

答案 1 :(得分:2)

Obj C中没有多重继承。但是,您可以使用协议,组合和消息转发来实现目标。我可以补充一点,只是在Apple的开发文档页面中搜索上述3个关键字是一种很好的学习和入门方式。

答案 2 :(得分:2)

视图控制器的任务之一是携带足够的状态,以便可以释放和重建视图以处理低内存情况。所以这可能是一个坏主意。

通常,iOS框架使用委托作为一种巧妙的方式来组合2个超类的行为:您将一个(或两个)子类化,并将另一个类的实例作为成员变量。整洁而简单,无论如何可能是更好的设计。