私はTileOverlay.hというファイルに次のコードビットに出くわした:のObjective-Cプロトコル
@protocol TileOverlay <MKOverlay>
私はこれが何をしているかを明示的に理解しようとしています。他のいくつかのオーバーレイは、この.hファイルをインポートします。このファイルは基本的にMKOverlayクラスの修正版を作成するだけですか?
もしそうでない場合は、その動作を明確にしてください。
私はTileOverlay.hというファイルに次のコードビットに出くわした:のObjective-Cプロトコル
@protocol TileOverlay <MKOverlay>
私はこれが何をしているかを明示的に理解しようとしています。他のいくつかのオーバーレイは、この.hファイルをインポートします。このファイルは基本的にMKOverlayクラスの修正版を作成するだけですか?
もしそうでない場合は、その動作を明確にしてください。
これはプロトコル継承と呼ばれます。
MKOverlay
を実装するオブジェクトのメソッドのセットを定義するプロトコルです。 TileOverlay
に準拠したオブジェクトは、TileOverlay
HereからMKOverlay
からメソッドとメソッドを実装する必要があることを意味MKOverlay
ため
TileOverlay
継承は、プロトコルの継承についてもう少し話しリンクされているプロトコルをどのよう
MKOverlay
はプロトコルであり、TileOverlay
はMKOverlay
を拡張するプロトコルである。
TileOverlay
プロトコルに準拠するクラスも、MKOverlay
プロトコルに準拠しています。
詳細な説明については、ドキュメントのProtocols Within Protocolsを参照してください。
あなたは基本的に、彼らが実装クラスが従わなければならない契約を宣言し、JavaやC#でのインターフェイスなどのプロトコルを考えることができます。違いは、Objective Cでは、宣言されたメソッドのいくつかをオプションにすることができます。
Objective-Cのプロトコルは、JavaまたはC#でインターフェイスと呼ばれるものです。 Obj-Cの言葉では、に準拠して、他のクラスが満たすことができる契約です。に従います。
この:
@protocol TileOverlay <MKOverlay>
は、それ自体でMKOverlay
を拡張TileOverlay
という名前のプロトコルを定義します。それはTileOverlay
に準拠しており、MKOverlay
にも適合している必要があります。
Obj-Cのプロトコルは、JaveやC#のインタフェースと同様に、実装には関係しません。それは何もしません。これはコンパイル時のマーカーであり、必要な場合は実行時に機能的に存在するかどうかを確認するためのマーカーです。
JavaとC#のインタフェースとObjective-Cのプロトコルには、IMOがありますが、プロトコルはオプションのメソッドを持つことができます。これは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