有人可以在objective-c中解释代表吗?

时间:2010-11-07 05:06:52

标签: iphone objective-c programming-languages delegates

我一直在使用Objective-C并且非常了解它的大多数功能。但是,代表们的概念使我望而却步。 有人可以简单易懂地解释一下代表是什么,如何在iPhone SDK中使用它们,以及如何在我自己的代码中最好地利用它们?

谢谢!

3 个答案:

答案 0 :(得分:5)

在Objective-C中使用委托有几个主要原因,这些原因略有不同:

  1. 增强框架类的基本功能。例如,一个UITableView本身很无聊,所以你可以给它一个委托来处理有趣的位(创建表格单元格,为节标题添加文字,你有什么)。这样,UITableView永远不会改变,但不同的表视图可以看起来和行为有很大不同。

  2. 与依赖关系层次结构中的父对象进行通信。例如,您可能有一个带有按钮的视图,用户可能会推动该按钮执行影响其他视图的操作。视图必须向其父视图或视图控制器发送消息,以便它可以创建或销毁或修改其他视图。为此,您将父对象(最有可能通过协议)作为弱引用传递到视图中(在Objective-C中, assign 属性)。然后,视图可以将协议中声明的任何消息发送给父对象或委托对象。

  3. 这种方法不需要涉及视图。例如,NSURLConnection使用此机制将事件传递回其委托,该委托可能是创建它的对象。

答案 1 :(得分:3)

基本上,所有委托都是一个接受来自另一个对象的反馈的对象。简而言之,当一个对象发生了事情时,它会告诉它的委托(假设它有一个)。

例如,假设我有一个放置在视图中间的UITextView的UIViewController。我将我的UIViewController设置为UITextView的委托。然后,当对文本视图执行某些操作(开始编辑,文本更改,结束编辑等)时,它会告诉它的委托,以便它可以执行它需要做的任何逻辑,例如每次字符更改时进行拼写检查,或者解除键盘收到返回键时按下。

委托方法执行与C中的回调函数类似的功能。

希望有道理:)

答案 2 :(得分:0)

我从Lynda.com教程得到的最好和最简单的概念是:当你设置代表时,这意味着你已经完成了工作。因此,如果要使用以协议方法编写的方法,则必须通过在Delegate类参考中搜索并使用它们来实现它们。我希望它有所帮助。

顺便说一句,代表们是优秀的。他们是你的朋友。它们是为了让您作为程序员的生活变得更加容易。