1
#import <UIKit/UIKit.h>

@protocol myProtocol <NSObject>

-(void)aMethod;

@end

@interface ViewController : UIViewController

@property (weak) id<myProtocol> dSource;

@end

私は Obj-c プロトコルをしっかりと把握しようとしています。研究のために Apple Doc を読んでいますが、明確でないことはほとんどありません以下はドキュメントのポイントです。

  1. 円グラフ ビュー クラス インターフェイスには、データ ソース オブジェクトを追跡するためのプロパティが必要です。(上記のコードでは、ほとんどの場合、この方法でプロトコルを宣言します。クラスで宣言されたプロトコルがある場合、なぜ追跡オブジェクトが必要なのですか?またはプロトコルを独立したクラスで定義できるのでしょうか?そのために追跡オブジェクトが必要ですか?)

  2. プロパティに必要なプロトコル準拠を指定すると、プロトコルに準拠していないオブジェクトにプロパティを設定しようとすると、コンパイラの警告が表示されます。

  3. 上で定義したプロトコルに準拠する ID で RespondsToSelector: メソッドを呼び出そうとすると、既知のインスタンス メソッドがないというコンパイラ エラーが発生します。id をプロトコルで修飾すると、すべての静的型チェックが元に戻ります。指定されたプロトコルで定義されていないメソッドを呼び出そうとすると、エラーが発生します。コンパイラ エラーを回避する 1 つの方法は、NSObject プロトコルを採用するようにカスタム プロトコルを設定することです。

4

1 に答える 1

1
  1. 私はこの質問を理解していません
  2. 正しい、プロパティは、プロパティがあなたのプロパティに準拠するIDであることを必要とします。それを何か他のものに設定しようとすると、コンパイラは正しく不平を言います
  3. これは、 RespondsToSelector: がプロトコルのメソッドであるNSObject ため、プロトコルを拡張するNSObject (標準) か、プロパティを NSObject として宣言することができるためです。
于 2013-02-06T12:04:51.030 に答える