3

长期以来,我一直在与代表作斗争。出于某种原因,这对我来说是一个非常困难的概念。我觉得现在我有了更多的知识,但我还远没有自信。

请告诉我这些是否不正确/不完整以及原因。谢谢你。

  1. 委托实现协议(未实现的方法头)

  2. 对象(委托者)可以注册委托(实现协议)。这可以通过声明一个实现协议的 id 类型的属性来完成:

    @property (weak, nonatomic) id <MyProtocol> myDelegate;
    
  3. 委托人可以在委托上调用某些方法(在 MyProtocol 协议中指定)

  4. 任何实现协议并且必须是 Delegator 的委托的类都可以这样声明自己:

    MyDelegator* myDelegator = segue.destinationViewController;
    myDelegator .delegate = self;
    
  5. 使用委托的优点:

    一种。减少耦合(Delegate 和 Delegator 不再相互依赖),这是一个重要的 OO 设计原则

    湾。使 Delegator 更通用;它现在可以与其他对象一起使用,而不仅仅是这个 Delegate

4

2 回答 2

3

1,2 - 是的

3 - 可以调用 MyProtocol 的任何方法,

4 - 正确。

5 - 几乎正确,一个很好的解释可以在这里找到委托和控制器

于 2013-06-22T13:17:29.980 回答
1
  1. 是的。但协议可以是非正式的。
  2. 是的。
  3. 是的。
  4. 是和不是。同样,委托可以非正式地实现方法......但是您希望委托者respondsTo在调用之前验证委托(或实现)方法。

    委托不一定需要将自己设置为委托人的委托(事实上,它不应该)。 类比:一位业务专家来到我的公司,告诉我的老板将行政文书工作委托给他的秘书。秘书(代表)没有告诉老板(代表)让它工作……第三方做了。

    委托人不必将自己注册为委托人(同样,它不应该)。它只需要能够完成工作。通常,委托人对委托人一无所知(没有指向)。所以代表不会有MyDelegator* myDelegator = segue.destinationViewController;,不。

  5. 一)是的!

    B) 是的。本质上什么是“减少耦合”;

    添加 C):它还允许您通过在运行时简单地更改委托来即时更改行为。

于 2013-06-22T14:54:51.223 回答