我长期以来一直在与代表们挣扎。出于某种原因,对我来说这是一个非常难的概念。我觉得现在我有更多的知识,但我还远没有自信。
请告诉我这些是否不正确/不完整以及原因。谢谢。
委托实施协议(未实现的方法标题)
对象(委托者)可以注册委托(实现协议)。这可以通过声明实现协议的id类型的属性来完成:
@property (weak, nonatomic) id <MyProtocol> myDelegate;
委托人可以在代理上调用某些方法(在MyProtocol协议中指定)
任何实现协议且必须是Delegator委托的类都可以声明为:
MyDelegator* myDelegator = segue.destinationViewController;
myDelegator .delegate = self;
使用委托的好处:
一个。减少耦合(委托和委托人不再相互依赖),这是一个重要的面向对象设计原则
湾使Delegator更通用;它现在可以与其他对象一起使用,而不仅仅是这个委托
答案 0 :(得分:3)
答案 1 :(得分:1)
是和否。同样,委托可以非正式地实现这些方法......但是你需要委托者在调用它之前验证代理respondsTo
(或实现)方法。
委托不一定需要将自己设置为委托者的委托(事实上,它不应该)。 类比:一位商业专家来到我的公司并告诉我的老板将行政文书委托给他的秘书。秘书(代表)没有告诉老板(代理人)给它工作......第三方做了。
代理人不必将自己注册为代表(再次,它不应该)。它只需要能够完成工作。通常,委托人对委托人一无所知(没有指针)。因此,代表不会有MyDelegator* myDelegator = segue.destinationViewController;
,没有。
A)是的!
B)是的。基本上是“减少耦合”是什么;
添加C):它还允许您通过在运行时更改委托来即时更改行为。