如有疑问,请查看文档!
基本上,委托是一种允许对象彼此交互而不会在它们之间产生强烈相互依赖性的方式,因为这会使应用程序的设计不那么灵活.而不是彼此控制的对象,他们可以有一个委托,他们发送(或委托)消息,委托做他们做的任何事情,以响应和行动这个消息,然后通常返回到另一个对象.
委托也是子类化的更好选择.您不必创建自己的自定义类来稍微改变其他对象的行为方式或传递数据,而是委托允许对象向其委托发送消息以便为它们工作,而无需创建子类以进行微小更改的开销.其他对象.
当然,委托的主要缺点是可用的委托方法取决于Apple工程师预见的有用之处以及他们期望人们需要的常见实现,这对您可以实现的目标施加了限制.尽管如Quinn Taylor所指出的那样,这是Cocoa框架特有的,因此并不适用于所有情况.
如果委托是子类化的选项,那么接受它,因为它是一种更清晰的方式来管理代码和对象之间的交互.
如有疑问,请查看文档!
基本上,委托是一种允许对象彼此交互而不会在它们之间产生强烈相互依赖性的方式,因为这会使应用程序的设计不那么灵活.而不是彼此控制的对象,他们可以有一个委托,他们发送(或委托)消息,委托做他们做的任何事情,以响应和行动这个消息,然后通常返回到另一个对象.
委托也是子类化的更好选择.您不必创建自己的自定义类来稍微改变其他对象的行为方式或传递数据,而是委托允许对象向其委托发送消息以便为它们工作,而无需创建子类以进行微小更改的开销.其他对象.
当然,委托的主要缺点是可用的委托方法取决于Apple工程师预见的有用之处以及他们期望人们需要的常见实现,这对您可以实现的目标施加了限制.尽管如Quinn Taylor所指出的那样,这是Cocoa框架特有的,因此并不适用于所有情况.
如果委托是子类化的选项,那么接受它,因为它是一种更清晰的方式来管理代码和对象之间的交互.
如上所述,委托不是iOS或Objective-C的功能,而只是一种编程技术,不需要特定的语言支持.
可以编写一个类(e,g,classA),使得它的getData和doSomething方法不能单独实现,而是由委托实现(可能因为classA不知道数据是什么或者它将要做什么).
为了实现这一点,classA提供了一个属性,通常称为委托(它只是指向类的指针 - 委托 - 实现委托方法)然后,当它想要调用这些方法时,它实际上调用了代表:
[self.delegate getData];
和
[self.delegate doSomething];
self.delegate
可能最初设置为self
:
self.delegate = self;
即classA实现它自己的这些方法的版本,除非它们被委托.
任何其他类,想要成为方法的实现者(即成为委托并可能覆盖classA的默认实现),首先将classA的委托设置为自身.所以如果classB想成为这些方法的委托,那么在classB中,我们会:
classA.delegate = self;
因此,当classA调用这些委托方法时,它实际上是调用classB来实现这些方法,而不知道有关classB的任何信息,甚至它不存在,而且classB不需要子类classA.
限制是classB只能覆盖classA想要委托的方法 - 通过子类化,您可以覆盖任何方法.
协议用于通过定义必须由委托实现的方法列表来形式化委派过程(委托者不提供方法的默认版本,并且方法必须在某处实现),或者可以由委托者任选地实现(即委托人拥有自己的版本,或者如果没有实现该方法也无关紧要).
代表是一种设计模式; 没有特殊的语法或语言支持.
委托只是另一个对象在发生某些事情时发送消息的对象,因此委托可以处理原始对象不是为其设计的特定于应用程序的详细信息.这是一种在没有子类化的情况下自定义行为的方法.