0

私は @protocol 内で Object メソッドを使用していますが、プロトコルはメソッド宣言のみをサポートしています。誰かがそれを同じメソッドのメソッド定義と接続する方法について助けてくれます.(メソッド定義を書く場所)。

4

2 に答える 2

1

プロトコルは、実装のないメソッド宣言の単なるリストです。それらを使用して、可能な (クラス) のセットを特定のプロトコルを実装するクラスに制限することができます。

たとえば、クラスがある場合GasStation、ステーションで燃料を補給できるオブジェクトのタイプ (クラス) を制限したい場合があります。もちろん、次のように、オブジェクトが class の子孫であることを単純に要求することもできますVehicle

@interface GasStation : NSObject
- (void)refuel:(Vehicle *)vehicle;
@end

@implementation GasStation 
- (void)refuel:(Vehicle *)vehicle {
    [vehicle addFuel:100];
}
@end

しかし、これでは、たとえばジェリカンをいっぱいにすることはできません。ただし、任意のタイプのオブジェクトを渡すことを許可するのも悪い考えです。インスタンスを渡すと、メッセージCatを送信しようとするとエラーが発生するためです。addFuel:

代わりに、燃料補給可能なクラスが実装する必要があるプロトコルを定義します。

@protocol RefuelableThing
@required
- (void)addFuel:(float)fuel;
@end

これで、そのプロトコルを使用して、燃料を補給できるオブジェクトの種類を制限できます。

@interface GasStation : NSObject
- (void)refuel:(NSObject<RefuelableThing> *)thing;
@end

Vehicleもちろん、 にはメソッドがあるため、 ではなくても、独自の別のバージョンを実装addFuel:できます。JerryCanVehicle

于 2012-10-02T15:22:42.953 に答える
0

プロトコルを宣言すると、それに準拠するすべてのクラスがそのプロトコルのメソッドを実装できます。プロトコルが宣言されているヘッダーをインポートし、そのクラスのインターフェイスにプロトコルを追加して、.mにメソッドを実装するだけです。このトピックについて読むことは、優れた提案です。

于 2012-10-02T15:17:22.313 に答える