#import <UIKit/UIKit.h>
@protocol myProtocol <NSObject>
-(void)aMethod;
@end
@interface ViewController : UIViewController
@property (weak) id<myProtocol> dSource;
@end
私は Obj-c プロトコルをしっかりと把握しようとしています。研究のために Apple Doc を読んでいますが、明確でないことはほとんどありません。以下はドキュメントのポイントです。
円グラフ ビュー クラス インターフェイスには、データ ソース オブジェクトを追跡するためのプロパティが必要です。(上記のコードでは、ほとんどの場合、この方法でプロトコルを宣言します。クラスで宣言されたプロトコルがある場合、なぜ追跡オブジェクトが必要なのですか?またはプロトコルを独立したクラスで定義できるのでしょうか?そのために追跡オブジェクトが必要ですか?)
プロパティに必要なプロトコル準拠を指定すると、プロトコルに準拠していないオブジェクトにプロパティを設定しようとすると、コンパイラの警告が表示されます。
上で定義したプロトコルに準拠する ID で RespondsToSelector: メソッドを呼び出そうとすると、既知のインスタンス メソッドがないというコンパイラ エラーが発生します。id をプロトコルで修飾すると、すべての静的型チェックが元に戻ります。指定されたプロトコルで定義されていないメソッドを呼び出そうとすると、エラーが発生します。コンパイラ エラーを回避する 1 つの方法は、NSObject プロトコルを採用するようにカスタム プロトコルを設定することです。