最佳实践:何时使用代表? NSXMLParser委托与NSURLConnection

时间:2011-07-01 22:33:45

标签: ios delegates

我正在实施一个简单的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 个答案:

答案 0 :(得分:1)

两个都是实现为代理。您正在查看代码并通过名称猜测它是什么,而不是阅读Apple文档。当您看到<SomeNameHere>时,这是protocol。委托符合它,这就是协议名为SomethingDelegate的原因。它不是因为它是代表而被称为。

NSURLConnection为其委托使用非正式协议而不是正式协议。所有这些真正意味着当您使用对象作为委托而不是检查自己是否实现相关方法时,系统会接受您的意思。我不知道为什么会出现这种情况。当你自己实现委托系统时,最好使用正式的协议,但这不是必需的。

不要费心阅读MSDN上的任何文档。这适用于C#,而非Objective C.阅读Apple开发人员中心的文档。