Tyl*_*ler 79

委托是指向对象的指针,该对象具有委托持有者知道如何调用的一组方法.换句话说,它是一种从后来创建的对象启用特定回调的机制.

一个很好的例子是UIAlertView.您创建一个UIAlertView对象以向用户显示一个短消息框,可能会让他们选择"OK"和"Cancel"两个按钮.该UIAlertView需求的方式给你打电话回来,但它没有信息,其中反对的回调和调用什么方法.

要解决此问题,您可以将self指针发送UIAlertView为委托对象,作为交换,您同意(通过UIAlertViewDelegate在对象的头文件中声明)实现一些UIAlertView可以调用的方法,例如alertView:clickedButtonAtIndex:.

查看这篇文章,了解委托设计模式和其他回调技术的快速高级介绍.

参考文献:


Jor*_*dan 56

见这个讨论

委托允许一个对象在事件发生时将消息发送到另一个对象.例如,如果您使用NSURLConnection类异步下载网站中的数据.NSURLConnection有三个常见的委托:

 - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
 - (void)connectionDidFinishLoading:(NSURLConnection *)connection
 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
Run Code Online (Sandbox Code Playgroud)

当NSURLConnection分别遇到故障,成功完成或从网站收到响应时,将调用这些代理中的一个或多个.

  • 这有点像Android中的听众吗? (5认同)

Mik*_*keN 21

代表是一种设计模式; 没有特殊的语法或语言支持.

委托只是另一个对象在发生某些事情时发送消息的对象,因此委托可以处理原始对象不是为其设计的特定于应用程序的详细信息.这是一种在没有子类化的情况下自定义行为的方法.

  • 所以基本上它是实现回调的OOP方式? (2认同)

Fel*_*ing 5

我认为这篇维基百科文章最好地描述了它:http://en.wikipedia.org/wiki/Delegation_pattern

它只是"设计模式"的一种实现,在Objective-C中非常常见