【问题标题】:Are these points about delegates in IOS correct? Yes or no?这些关于 IOS 代表的观点是否正确?是还是不是?
【发布时间】:2013-06-22 23:10:55
【问题描述】:

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

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

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

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

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

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

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

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

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

【问题讨论】:

    标签: ios objective-c delegates protocols


    【解决方案1】:

    1,2 - 是的

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

    4 - 正确。

    5 - 几乎正确,一个很好的解释可以在这里找到delegate and controllers

    【讨论】:

      【解决方案2】:
      1. 是的。但协议可以是informal
      2. 是的。
      3. 是的。
      4. 是的,不是的。同样,委托可以以非正式的方式实现这些方法...但是您希望委托人在调用它之前验证委托respondsTo(或实现)方法。

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

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

      5. A) 是的!

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

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

      【讨论】:

        猜你喜欢
        • 2021-12-02
        • 1970-01-01
        • 2013-03-07
        • 1970-01-01
        • 2023-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多