Одно быстрое замечание: полезно понимать разницу между формальными и неформальными протоколами. Также формальные протоколы имеют дополнительные методы, которые не нужно вызывать.
Когда вы пишете свой собственный протокол, вы должны проверить -respondsToSelector: перед отправкой необязательных / неофициальных методов.
формальные протоколы определены как ...
@protocol SomeProtocol <NSObject>
-(void)someMethod:(id)sender;
-(void)someOtherMethod:(NSString*)aString;
@property(nonatomic,retain) someProperty;
@optional
-(BOOL)someOptionalMethod;
@end
и принимаются как ...
@interface SomeClass : NSObject <SomeProtocol> {
}
@end
это говорит компилятору о том, что вы принимаете SomeProtocol, и вам не нужно объявлять ваши методы для протокола в файле .h, он также сообщает компилятору, что вы предупредили вас, если вы не реализовали все необходимые методы .
для неформальных протоколов вы не принимаете их синтаксически, но вам нужно будет объявить ваши методы в .h файле.