Я новичок в Objective-C и разработке на платформах Apple, но, надеюсь, я смогу сформулировать этот вопрос понятным образом, независимо от того:)
Я хочу проанализировать XML-канал для своего приложения для iPhone, и я решил вместо того, чтобы помещать все методы делегирования из экземпляра NSXMLParser в мой контроллер представления, я бы обернул это внутри класса FeedParser. Прочитав несколько документов и пример кода, я пришел к следующему:
@protocol FeedParserDelegate <NSObject>
- (void)parserDidLoadEpisodes:(NSArray *)episodes;
@end
@interface FeedParser : NSObject {
id <FeedParserDelegate> delegate;
}
@property (nonatomic, assign) id <FeedParserDelegate> delegate;
- (id)initWithURL:(NSURL *)url delegate:(id<FeedParserDelegate>)theDelegate;
@end
Simple. Делегаты моего объекта FeedParser просто должны реализовать parserDidLoadEpisodes
.
Однако, когда я фактически начал использовать класс FeedParser
, использующий NSXMLParser
, я понял, что мне не нужно указывать, что FeedParser
реализует протокол для NSXMLParser
- я мог просто реализовать методы делегата что я хотел сделать что-то с. Я думаю, что я заметил это с другими классами, которые также следуют шаблону делегата, но не всем.
Так почему бы мне не просто не указать формальный протокол для моего FeedParser
класса? Было бы отрезать некоторые, возможно, ненужный код. Я предполагаю, что вопрос заключается в следующем: почему я хотел бы создать формальный протокол вместо того, чтобы просто что-то делать, например, просто проверить, реализован ли метод в делегате с respondsToSelector
? Только ли так, что компилятор выдаст приятные предупреждения, если требуемый метод делегата не реализован?