在XML解析的示例代码中,我遇到了一条评论:
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];
//Initialize the delegate.
XMLParser *parser = [[XMLParser alloc] initXMLParser];
//Set delegate
[xmlParser setDelegate:parser];
有人可以告诉我协议的委托方法和委托之间的区别吗?
答案 0 :(得分:2)
协议就像一个接口。如果您来自JAVA或C#,您已经看到了这一点。它只是一个没有实现的方法列表。类可以(或不符合)符合特定协议。类必须实现标记为必需的方法。那些可选项无法实现。
相反,委托是一种在两个不同对象之间创建关系的模式。其中一个,比如A,由第二个辅助,比如说B.换句话说,B为A做了一些事情。两者之间的关系是协议中列出了委托方法(针对特定类)。这里称为委托协议。
为什么代表团很重要?在应用程序生命周期的某个时刻,如果类向其委托发送消息(这不是nil)并且它已实现了特定方法(它可以响应该选择器),则消息由其委托接收。此时,控制由执行某些计算的委托捕获,并且可能返回一些结果。
希望它有所帮助。
答案 1 :(得分:1)
委托的想法就像你正在进行一些操作以及什么时候完成它,或者需要通知另一个对象进行操作或从中获取数据询问代表一样。例如: 在表视图中,它需要从数据源获取列表并告诉某人何时选择了一个对象,即设置数据源的位置以及委托tableview将调用方法的对象。在协议中定义它们相应地实现。 (比如当你需要该协议中的内容时,请与该代表交谈)
我希望这种非正式的解释可以帮助你
有关代表的更多(正确)信息,请检查:http://en.wikipedia.org/wiki/Delegation_pattern
答案 2 :(得分:1)
一般来说,它是“完成工作”的对象。
对于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;