Лучшая практика: когда использовать делегата или нет? NSXMLParserDelegate vs NSURLConnection - PullRequest
0 голосов
/ 02 июля 2011

Я использую простой клиент Twitter в качестве учебного примера.

Мой контроллер реализует NSXMLParserDelegate с пользовательскими реализациями для серии событий / обратных вызовов. Аналогично, я реализую серию обратных вызовов для NSURLConnection. Я не понимаю, почему первый является делегатом, а второй нет. Такое ощущение, что оба являются классами обработчиков событий и могут легко быть делегатами. Я прочитал лучшие практики на msdn и думаю, что оба будут реализованы как делегаты. Что мне здесь не хватает? Это действительно имеет значение?

 @interface SimpleTwitterClientViewController : UIViewController <NSXMLParserDelegate> {

     // Event handlers/callbacks for NSXMLParser Delegate
     - (void)parserDidStartDocument:(NSXMLParser *)parser;
     - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
    namespaceURI:(NSString *)namespaceURI
    qualifiedName:(NSString *)qualifiedName
    attributes:(NSDictionary *)attributeDict;
     - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
    namespaceURI:(NSString *)namespaceURI
    qualifiedName:(NSString *)qName;
     - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string;
     - (void)parserDidEndDocument:(NSXMLParser *)parser;

     // Event handlers/callbacks for URL Connection
     - (void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;
     - (void) connection:(NSURLConnection *)connection didFailWithError: (NSError *)error;
     - (void) connectionDidFinishLoading: (NSURLConnection*) connection;
}

1 Ответ

1 голос
/ 02 июля 2011

Оба реализованы как делегаты.Вы смотрите на код и угадываете его по названию, а не читаете документацию Apple.Когда вы видите <SomeNameHere>, это протокол .Делегат соответствует этому, поэтому протокол называется SomethingDelegate.Это не называется, потому что это делегат.

NSURLConnection использует неофициальный протокол для своего делегата, а не формальный.Все это на самом деле означает, что система берет на себя ваше слово, когда вы используете объект в качестве делегата, а не проверяете для себя, что вы реализуете соответствующие методы.Я не знаю какой-либо конкретной причины, почему это так.Лучше использовать формальные протоколы, когда вы сами внедряете системы делегирования, но в этом нет необходимости.

Не беспокойтесь о чтении какой-либо документации на MSDN.Это для C #, а не Цель C. Прочтите документацию в центре разработчиков Apple.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...