2011-07-26 12 views
1

私はTileOverlay.hというファイルに次のコードビットに出くわした:のObjective-Cプロトコル

@protocol TileOverlay <MKOverlay> 

私はこれが何をしているかを明示的に理解しようとしています。他のいくつかのオーバーレイは、この.hファイルをインポートします。このファイルは基本的にMKOverlayクラスの修正版を作成するだけですか?

もしそうでない場合は、その動作を明確にしてください。

答えて

0

これはプロトコル継承と呼ばれます。

MKOverlayを実装するオブジェクトのメソッドのセットを定義するプロトコルです。 TileOverlayに準拠したオブジェクトは、TileOverlay

HereからMKOverlayからメソッドとメソッドを実装する必要があることを意味MKOverlayため

TileOverlay継承は、プロトコルの継承についてもう少し話しリンクされているプロトコルをどのよう

5

MKOverlayはプロトコルであり、TileOverlayMKOverlayを拡張するプロトコルである。

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> 

は、それ自体でMKOverlayを拡張TileOverlayという名前のプロトコルを定義します。それはTileOverlayに準拠しており、MKOverlayにも適合している必要があります。

Obj-Cのプロトコルは、JaveやC#のインタフェースと同様に、実装には関係しません。それは何もしません。これはコンパイル時のマーカーであり、必要な場合は実行時に機能的に存在するかどうかを確認するためのマーカーです。

+0

JavaとC#のインタフェースとObjective-Cのプロトコルには、IMOがありますが、プロトコルはオプションのメソッドを持つことができます。これはJavaやC#、AFAIKでは不可能です。 –

+0

@Rudy Velthuis - 非常に真実で、Obj-Cプロトコルの**非常に便利な機能です。 – PeyloW

関連する問題