2011-07-26 67 views
1

我碰到下面的代码位在名为TileOverlay.h文件传来:Objective-C的协议

@protocol TileOverlay <MKOverlay> 

我想明确地了解这是什么做的。其他几个覆盖层然后导入这个.h文件。这个文件是否仅仅创建了一个MKOverlay类的修改版本?

如果不是,你能否澄清它的作用?

回答

0

它被称为协议继承。

MKOverlay是一个协议,定义了一组要实现的对象的方法。

TileOverlay继承了MKOverlay,这意味着符合TileOverlay对象,应该实现从TileOverlay

HereMKOverlay方式和方法是会谈多一点点有关协议继承链路

5

MKOverlay是协议,并且TileOverlay是延伸MKOverlay的协议。

任何符合TileOverlay协议的类也符合MKOverlay协议。

请参阅Protocols Within Protocols的文档中的详细说明。

+0

如何做一个协议不同于普通班,那么呢? –

+0

协议是没有实现的接口。一个类可以遵循一个协议来宣告它支持协议的功能。把它看作接口的多重继承。 – bbum

+0

[Protocols](http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProtocols.html#//apple_ref/doc/uid/TP30001163-CH15-SW1)声明方法可以通过类 – albertamg

1

你可以想象Java或C#中的接口这样的协议,基本上他们声明了实现类必须遵循的协议。不同之处在于,在Objective C中,可以使某些已声明的方法可选。

0

Objective-C中的一个协议就是你在Java或C#中调用一个接口。这是任何其他职业都可以履行的合同,以Obj-C的说法符合

此:

@protocol TileOverlay <MKOverlay> 

定义命名的TileOverlay协议本身延伸MKOverlay。这是通过符合TileOverlay您还必须符合MKOverlay

Obj-C中的协议,就像Jave或C#中的接口一样,与实现无关。它什么都不做。它只是编译时的一个标记,如果你愿意,可以在运行时检查一些函数是否存在。

+0

来实现虽然IMO,Java和C#接口和Objective-C协议之间存在一个显着的区别:协议可以(并且经常)具有可选的方法。这在Java或C#AFAIK中是不可能的。 –

+0

@Rudy Velthuis - 非常真实,以及Obj-C协议的**非常有用的功能。 – PeyloW