【问题标题】:Can someone please explain delegates in objective-c?有人可以解释一下objective-c中的代表吗?
【发布时间】:2011-05-06 05:16:01
【问题描述】:

我使用 Objective-C 已经有一段时间了,并且非常了解它的大部分功能。但是,代表的概念使我难以理解。 有人可以简明扼要地解释什么是委托,它们是如何在 iPhone SDK 中使用的,以及我如何在自己的代码中最好地利用它们?

谢谢!

【问题讨论】:

标签: iphone objective-c programming-languages delegates


【解决方案1】:

我从 Lynda.com 教程中得到的最简单的概念是:当您设置委托时,这意味着您有工作要做。因此,如果您想使用以协议方法编写的方法,则必须通过在 Delegate Class Reference 中搜索并使用它们来实现它们。我希望它有所帮助。

顺便说一句,代表是优秀的。他们是你的朋友。它们旨在让您作为程序员的生活更加轻松。

【讨论】:

    【解决方案2】:

    本质上,委托就是一个接受来自另一个对象的反馈的对象。简单地说,当一个对象发生事情时,它会告诉它的委托(假设它有一个)。

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

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

    希望这是有道理的:)

    【讨论】:

    • ~ 你的意思是“当一个对象发生事情时,它会告诉它的委托”Event Handlers?
    • 嘿,是的,我的意思是“它”,已经很晚了,错误发生了 ;) 是的,事件处理程序之间确实没有太大区别(比如你在 UIButton 中连接到的方法)和委托方法。当您将事件连接到方法时,您正在为该事件指定特定的自定义方法。委托方法是在协议中定义的,而不是任意的。这个想法是,如果您知道委托协议,那么只要您实现这些方法,您就可以成为该对象的委托,而无需专门将每个事件与方法联系起来。至少这是我的看法。
    【解决方案3】:

    在 Objective-C 中使用委托有几个主要原因,它们之间存在细微差别:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-21
      • 2016-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-15
      相关资源
      最近更新 更多