Что означает настройка делегата? - PullRequest
0 голосов
/ 23 февраля 2012

Как и в примере кода для разбора XML, я встретил комментарий:

NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];

//Initialize the delegate.
XMLParser *parser = [[XMLParser alloc] initXMLParser];

//Set delegate
[xmlParser setDelegate:parser];

Может кто-нибудь сказать мне разницу между методом делегата протокола и делегатом в целом?

Ответы [ 3 ]

2 голосов
/ 23 февраля 2012

Протокол похож на интерфейс.Если вы пришли из JAVA или C #, вы уже видели это в действии.Это просто список методов без реализации.Класс может (или не может) соответствовать определенному протоколу.Класс должен реализовывать методы, помеченные как необходимые.Те, которые являются опциональными, не могут быть реализованы.

Вместо этого делегирование представляет собой шаблон, который создает отношения между двумя различными объектами.Одному из них, скажем, A, помогает второй, скажем, B. Иными словами, B что-то делает для A.

Отношения между ними заключаются в том, что методы делегата (для определенного класса) перечислены впротоколы.Здесь термин «протокол делегата».

Почему делегирование важно?В какой-то момент жизненного цикла вашего приложения, если класс отправляет сообщение своему делегату (это не ноль), и он реализует определенный метод (он может ответить на этот селектор), сообщение получает его делегат.На этом этапе управление перехватывается делегатом, который выполняет некоторые вычисления и, возможно, может вернуть некоторый результат.

Надеюсь, это поможет.

1 голос
/ 23 февраля 2012

Как правило, это объект, который "выполняет работу".

В случае NSXMLParser, когда вы создаете парсер, вы устанавливаете объект в качестве его делегата, это означает, что этот объект долженреализовать методы NSXMLParsedDelegate.

Например:

- (void) parseData:(NSData*) xmlResponse;

- (void)parserDidStartDocument:(NSXMLParser *)parser;

- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError;

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 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;
1 голос
/ 23 февраля 2012

идея делегирования просто похожа на то, когда у вас происходит какая-то операция, и когда с ней что-то делается, или вам нужно уведомить другой объект, чтобы выполнить операцию или получить от него данные, просит делегата. как например: в табличном представлении ему нужно получить список из источника данных и сообщить кому-либо, когда выбран объект, именно там вы задаете источник данных и делегат, которые являются объектами, для которых табличное представление будет вызывать методы. определены в протоколе, который они соответственно реализуют. (например, поговорить с этим делегатом, когда вам нужно что-то в этом протоколе)

Надеюсь, это неофициальное объяснение поможет вам

для более подробной информации о проверке делегатов: http://en.wikipedia.org/wiki/Delegation_pattern

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