There is no way to enforce this at compile-time. Your best bet is, at runtime, when the your delegate
property is set (or whatever you use to refer to the object implementing the protocol), just go ahead and implement whatever conformance rules you need there using -respondsToSelector:
and throw an exception immediately if the object doesn't conform to your rules. Something like:
- (void)setDeleate:(id<MyDelegate>)delegate {
if ([delegate respondsToSelector:@selector(shouldIDoSomethingHere)]) {
NSAssert([delegate respondsToSelector:@selector(whereShouldIDoIt)], @"Delegate must respond to -whereShouldIDoIt if it responds to -shouldIDoSomethingHere");
}
// ...
_delegate = delegate;
}