読者です 読者をやめる 読者になる 読者になる

id<Protocol>と書くときの@protocolの宣言の方法

delegateをメンバに持つようなクラスを作るとき、delegateの型をidじゃなく特定のProtocolが実装されていることを指定したい時がある。そういう時はid delegate;と書けばいいんだけど、自作のProtocolだとrespondsToSelectorとかのNSObjectで定義されているメソッドが無い、と警告が出る。
調べてみたところ以下のページに解説があった。
id<Protocol>, Retain/Release and Protocol Inheritance | Mobile Orchard
Protocolの宣言時にNSObject Protocolを継承すればいいらしい。
つまり

@protocol MyProtocol <NSObject>
- (void)hoge;
@end

と書けば警告が出なくなる。