我碰到下面的代码位在名为TileOverlay.h文件传来:Objective-C的协议
@protocol TileOverlay <MKOverlay>
我想明确地了解这是什么做的。其他几个覆盖层然后导入这个.h文件。这个文件是否仅仅创建了一个MKOverlay类的修改版本?
如果不是,你能否澄清它的作用?
我碰到下面的代码位在名为TileOverlay.h文件传来:Objective-C的协议
@protocol TileOverlay <MKOverlay>
我想明确地了解这是什么做的。其他几个覆盖层然后导入这个.h文件。这个文件是否仅仅创建了一个MKOverlay类的修改版本?
如果不是,你能否澄清它的作用?
它被称为协议继承。
MKOverlay
是一个协议,定义了一组要实现的对象的方法。
TileOverlay
继承了MKOverlay
,这意味着符合TileOverlay
对象,应该实现从TileOverlay
Here从MKOverlay
方式和方法是会谈多一点点有关协议继承链路
MKOverlay
是协议,并且TileOverlay
是延伸MKOverlay
的协议。
任何符合TileOverlay
协议的类也符合MKOverlay
协议。
请参阅Protocols Within Protocols的文档中的详细说明。
你可以想象Java或C#中的接口这样的协议,基本上他们声明了实现类必须遵循的协议。不同之处在于,在Objective C中,可以使某些已声明的方法可选。
Objective-C中的一个协议就是你在Java或C#中调用一个接口。这是任何其他职业都可以履行的合同,以Obj-C的说法符合。
此:
@protocol TileOverlay <MKOverlay>
定义命名的TileOverlay
协议本身延伸MKOverlay
。这是通过符合TileOverlay
您还必须符合MKOverlay
。
Obj-C中的协议,就像Jave或C#中的接口一样,与实现无关。它什么都不做。它只是编译时的一个标记,如果你愿意,可以在运行时检查一些函数是否存在。
来实现虽然IMO,Java和C#接口和Objective-C协议之间存在一个显着的区别:协议可以(并且经常)具有可选的方法。这在Java或C#AFAIK中是不可能的。 –
@Rudy Velthuis - 非常真实,以及Obj-C协议的**非常有用的功能。 – PeyloW
如何做一个协议不同于普通班,那么呢? –
协议是没有实现的接口。一个类可以遵循一个协议来宣告它支持协议的功能。把它看作接口的多重继承。 – bbum
[Protocols](http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProtocols.html#//apple_ref/doc/uid/TP30001163-CH15-SW1)声明方法可以通过类 – albertamg