objective-C
中的工作方式以及什么是工作的很好的解释/教程吗?delegates
的阐述不够,也没有很好地解释它们,让我无法真正理解它们的功能和功能。发布于 2009-06-25 19:47:18
如果有疑问,请检查docs!
基本上,委托是一种允许对象之间进行交互而不会在它们之间创建强烈的相互依赖关系的方法,因为这会降低应用程序的设计灵活性。它们可以有一个代理,而不是对象之间的控制,它们向代理发送(或委托)消息,代理做他们所做的任何事情,以便对此消息做出响应和操作,然后通常将某些内容返回给另一个对象。
委托也是子类化的一种更好的选择。您不必创建自己的自定义类来稍微改变其他对象的行为方式,或者向它们传递数据,委托允许对象向它们的委托发送消息来为它们做工作,而不需要创建子类来对其他对象进行细微的更改。
当然,委派的主要缺点是,可用的委派方法取决于Apple工程师预见的有用内容,以及他们期望人们需要的常见实现,这对您可以实现的内容施加了限制。虽然,正如Quinn Taylor指出的那样,这是特定于Cocoa框架的,因此并不适用于所有情况。
如果委托是比子类化更好的选择,那么就使用它,因为它是管理代码和对象之间交互的一种更干净的方式。
发布于 2012-10-11 15:03:21
如上所述,委托不是iOS或Objective-C的特性,而仅仅是一种编程技术,不需要特定的语言支持。
一个类(例如,g,classA)可以这样写:它的getData和doSomething方法不是由它自己实现的,而是由一个委托实现的(可能是因为classA不知道数据是什么,或者它必须做什么)。
为此,classA提供了一个属性,通常称为委托( delegate )(它只是一个指向实现委托方法的类的指针),然后,当它想要调用这些方法时,它实际上调用了委托中的方法:
[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想要委托的方法-通过子类化,您可以覆盖任何方法。
协议用于通过定义方法列表来正式化委托过程,这些方法的必须由委托()实现(委托者不提供方法的默认版本,方法必须在某个地方实现),或者可以由委托(即,委托者有其自己的版本,或者方法不实现也无关紧要)来实现。
发布于 2011-07-19 07:33:02
委托是一种设计模式;没有特殊的语法或语言支持。
委托只是一个对象,当某些事情发生时,另一个对象会向其发送消息,以便代理可以处理应用程序特定的细节,而原始对象并不是为此而设计的。这是一种无需子类化就可以自定义行为的方法。
https://stackoverflow.com/questions/1045803
复制相似问题