目标C - 实施和扩展之间的差异

时间:2012-06-26 08:46:31

标签: iphone objective-c cocoa

关于扩展课程和实施课程之间的区别的一般性问题。

@interface AppDelegate : UIResponder <UIApplicationDelegate>

在我的示例中,我的类AppDelegate从UIResponder类扩展,但实现了UIApplicationDelegate类。

有人可以解释一下......您是否也有可能访问UIApplicationDelegate对象/类的方法?差异在哪里?

由于

3 个答案:

答案 0 :(得分:1)

如果您使用Java术语,那么在您的示例中,您将扩展(通常称为Subclassing)UIResponder类。

您的示例还实现了UIApplicationDelegate,它类似于实现一个接口,您必须定义UIApplicationDelegate协议所需的方法,并且您可以选择实现可选方法。

与Java类似,您只能扩展或子类化一个类,但您可以在类中实现多个委托协议

如果您想了解更多信息,Apple的协议指南非常方便:https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProtocols.html

答案 1 :(得分:0)

在非常基础的层面上,我们可以看到这是一种在目标C中实现多重继承的形式。

由于目标C只支持单一继承,但我们可以通过使用协议(类似于java中的接口)来实现多个iinheritence。

所以当我们将一个类子类化时 - 然后我们说我们扩展它。

当我们使用协议访问常用功能时(为了拥有多个继承) - 我们说它实现了。

答案 2 :(得分:0)

扩展class =继承它。即您不会覆盖的方法将在超类中调用。

实现委托协议只是说明了您的类应该实现的方法。

请参阅(例如)https://developer.apple.com/library/mac/#documentation/cocoa/conceptual/objectivec/Chapters/ocProtocols.html#//apple_ref/doc/uid/TP30001163-CH15-SW1

http://www.thepensiveprogrammer.com/2010/05/objective-c-protocols-and-delegates.html