【问题标题】:Who is whose delegate?谁是谁的代表?
【发布时间】:2014-08-21 01:00:51
【问题描述】:

我是iOS新手,正在看《iOS Programming 4th Edition-Big Nerd Ranch》,看第7章的时候有个问题。

它说

按钮的生活相对简单。对于具有更复杂生命的对象,例如文本字段,Apple 使用委托模式。您将文本字段介绍给您的一个对象:“这是您的代表,当您生活中发生任何有趣的事情时,请向他发送消息。”文本字段保留一个指向其委托的指针。它发送给其代表的许多信息都是信息性的:“好的,我完成了编辑!”。

这让我很困惑,因为起初,这意味着文本字段可以作为它们的委托引入我的一个对象,但最后它说“文本字段保持指向其委托的指针”。文本字段本身不是其他人的代表吗?所以我不明白谁是谁的代表?这是否意味着文本字段可以是其他人的委托,但它也可以有自己的委托?不然呢?

提前致谢!

【问题讨论】:

  • 那段写得不好。委托对象(通常)由 UI 对象引用。

标签: ios objective-c delegates


【解决方案1】:

您的对象是委托。文本字段将向其发送消息。

【讨论】:

  • 知道了。因为我的母语不是英语,所以我在这里犯了一些错误。非常感谢。
  • 您必须指定您希望您的对象成为项目的委托,并且您的界面必须声明它将处理您的元素的委托。在 UITextField 的情况下,您的界面类似于 MyViewController: UIVIewController 然后在您的实现文件中您可以编写 MyTextField.delegate = self 最后实现您想要捕获的委托方法。
【解决方案2】:

了解委托的含义:它是您的委托——代表您的程序逻辑,并与 UI 对象交互以告诉它想要做什么。从某种意义上说,ambassador 会是一个更好的标题,因为它代表你在某个“偏远”的地方。

就像美国驻泰国大使一样,您的程序也可能有 UITextField 对象的大使。当您创建 UITextField 时,您告诉它它是大使/代表什么对象,然后当 UITextField 需要知道 想要做什么时,它会与该对象对话。

【讨论】:

    【解决方案3】:

    Apple 的许多框架对象都接受委托。委托是指向您知之甚少的某个匿名对象的指针。你所知道的只是它理解一组特定的调用(一个协议)。这就像一个私人术语。

    这个想法是系统对象向代理发送信息以告诉它发生了什么(用户在索引 4 处选择了选择器项目)或询问它应该如何表现(用户想要滚动到离开了。我应该允许吗?)

    通过使用委托设计模式,您可以构建通用对象,这些对象可以在各种情况下由各种不同的对象使用。

    当您阅读委托时,请考虑“客户”。系统对象是店主。它的代表是客户。

    店主不需要对他的顾客有太多了解。他接了一个产品订单,在订单准备好时呼叫客户的电话号码,交出产品,拿了一些钱,然后继续前进。顾客甚至不需要说太多店主的语言 - 只需下订单、了解订单何时准备好以及如何付款即可。

    协议是对象(店主)用来与其代表(客户)交谈的语言。它是一种有限的、正式定义的语言。任何理解对象(店主)语言(协议)中所需词语的代表(客户)都可以从对象(店主)那里获得服务。

    顺便说一句,您应该首先接受对您有帮助和/或最好的答案,并对您认为有用的所有答案进行投票。在这种情况下,我认为您应该接受@MirekE 的回答。他是第一个给你明确答案的人。

    【讨论】:

    • 非常感谢您向我展示了一个很好的答案并给了我建议。非常抱歉这是我第一次提出堆栈溢出问题,因此我的声誉不足以我投票给任何答案,当我获得足够的声誉时,我会完成它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-06
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    相关资源
    最近更新 更多