慕后森
如上所述,委托不是IOS或Object-C的特性,而是一种编程技术,不需要特定的语言支持。一个类(e,g,class A)可以写成getData和DoSomething方法可以通过委托(可能因为classA不知道数据将是什么或它必须做什么)来实现。为此,classA提供了一个属性,通常称为代表,(它只是实现委托方法的类-委托的指针),然后,当它想调用这些方法时,它实际上调用了委托中的方法:[self.delegate getData];和[self.delegate doSomething];self.delegate可能最初设置为self:self.delegate = self;也就是说,class A实现了这些方法的自己版本,除非它们被委派。任何其他类,如果希望成为方法的实现者(即委托,并可能重写classA的默认实现),将首先将classA的委托设置为自身。因此,如果classB想成为这些方法的委托,那么在classB中,我们将拥有:classA.delegate = self;所以当classA调用这些委托的方法时,它实际上是调用classB来实现这些方法,而不知道关于classB的任何信息,甚至不知道它的存在,而且class B不需要子类classA。其限制是,classB只能覆盖类A希望委托的方法-通过子类,您可以重写任何方法。协议通过定义一个方法列表将委托过程正规化。必由委托实现(委托方不提供方法的默认版本,方法必须在某个地方实现),也可以由委托实现(即委托程序有自己的版本,或者方法没有被执行也没关系)。