Daveがキャストしたキャストは機能しますが、人々が期待どおりにプロトコルを使用できるように、よりクリーンな代替方法があります。プロトコル自体がNSObjectプロトコルをサポートすることを宣言することができます。
NSObjectは単なる実装ではなく、すべてのperformSelector:メソッドの変形を含むプロトコルです。
@protocol MyProtocol <NSObject>
およびコンパイラの警告は(あなたは、プロトコルの定義をインポートしていると仮定すると)消える:だから、あなたは、単に他のクラスがプロトコルをサポートしているでしょうあなたはあなたのようなNSObjectのをサポートする、あなたのプロトコルに宣言することができます。
これは、あなたのプロトコルのサポートを宣言している人は、NSObjectでなければならないか、あるいは多くのメソッドを継承しなければならないことに注意してください。しかし、iPhoneプログラミングで使用されるすべてのクラスは、実際の考慮事項のためにNSObjectから派生しているため、一般的には問題にはなりません。
EDIT:
それは-performSelector:withObject:afterDelay:
は、NSObjectのプロトコル(遅延なしのものである)ではありませんが判明しました。プロトコルタイプを参照するためにidを使用することができるのであれば、あなたのプロトコルを使用するすべての人にとってまだ良いので、これを解決するためにプロトコルを使用しますが、自分でNSObjectプロトコルの拡張を宣言する必要があります。あなたのファイルのヘッダーには次のようなものを追加することができます:
@protocol MyProtocolNSObjectExtras <NSObject>
- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay;
@end
@protocol MyProtocol <NSObjectExtras>
....
@end
これまで説明したのと同じ利点があります。
パーフェクト!それでおしまい!!!!!! – SpaceDog
@Dave私はおそらくObjective-Cのことを他の誰よりもあなたからもっと知りました!ありがとう! –
@Jacobあなたは大歓迎です:) –