はい、これは有効なコードです。これは、メソッドを宣言することになります
- (id<ParentProtocol>)delegate;
- (void)setDelegate:(id<ParentProtocol>)delegate;
インターフェイスで同じセレクター (および)Parentのメソッドを宣言する-delegate-setDelegateChild
- (id<ParentProtocol, ChildProtocol>)delegate;
- (void)setDelegate:(id<ParentProtocol, ChildProtocol>)delegate;
id<ParentProtocol>とid<ParentProtocol, ChildProtocol>は互換性のある型であるため、これは許容されます (警告は発生しません) 。(これを、 inChildの宣言delegateが型であると宣言する状況と比較してくださいNSArray *。警告が表示されProperty type 'NSArray *' is incompatible with type 'id<ParentProtocol>' inherited from 'Parent'ます。)
ちなみに、以下のように書くChildProtocolことで継承するように定義できることは注目に値します。ParentProtocol
@protocol ParentProtocol <NSObject>
//....
@end
と
@protocol ChildProtocol <ParentProtocol>
//....
@end
これにより、次のインターフェイスに書き込むことができますChild
@property (nonatomic, unsafe_unretained) id<ChildProtocol>;
それよりも
@property (nonatomic, unsafe_unretained) id<ParentProtocol, ChildProtocol>;