diferencia ligeramente pedante, pero importante: lo que usted proporciona en su pregunta no es un objeto que sea un delegado de múltiples delegadores, sino un objeto que se ajuste a múltiples protocolos. En la mayoría de los casos, un delegado tendrá un protocolo asociado (UIActionSheetDelegate, UITextFieldDelegate), pero no todos los delegados tienen protocolos, y no todos los protocolos implican delegados.
En un ejemplo muy artificial, que podría tener un objeto que delegue en otro objeto que se ajusta a ningún protocolo:
#import "ObjectB.h"
@interface ObjectA : NSObject {
ObjectB *delegate;
}
@end
// ...
@interface ObjectB : NSObject { }
- (void)delegateMethod;
@end
En este ejemplo, los casos de Objecta esperan una instancia de ObjectB como su "delegado" , a pesar de que ObjectB no es realmente un protocolo, ¡sino una interfaz de clase! La existencia de un objeto como un delegado es más un estado de ánimo que un requisito estricto para tener un protocolo - es sólo que la mayoría (bueno, casi todos) los desarrolladores tendrán los métodos de delegado y romper a cabo en un protocolo para que varios objetos pueden convertirse en delegados para instancias de ObjectA, en lugar de requerir que el delegado sea una instancia (o subclase) de ObjectB. Esto también elimina la necesidad de que ObjectA "sepa acerca de" ObjectB en el sentido de #import
en su archivo de encabezado.
En un ejemplo ligeramente menos artificial, un objeto puede ajustarse a un protocolo sin ser un delegado. Piense en el protocolo NSCopying como un gran ejemplo de esto: todo lo que el protocolo dice que los objetos que lo implementan se puede copiar utilizando el método copy
. La gente no considera copy
un método "delegado", ya que ningún objeto va a decir [delegate copy]
sin hacer algo con esa copia, por lo que los objetos que implementan NSCopying no son realmente objetos "delegados".
Al final, solo recuerde: un protocolo no implica un delegado, y un delegado no siempre (pero generalmente lo hace) implica un protocolo.
Por supuesto, los protocolos informales también se usan comúnmente para los delegados, que es cuando no explícitamente se requieren los métodos como protocolo, pero se espera que conozcan los nombres de los métodos. UIKit y AppKit a menudo usan protocolos informales y simplemente tienen un comportamiento no operativo si la clase no admite el mensaje requerido por el protocolo. – AlBlue
AlBlue: ¡buen punto! Un ejemplo que viene a la mente es NSXMLParser, que no tiene un protocolo formal NSXMLParserDelegate correspondiente, pero documenta un puñado de métodos 'analizador: si ...:'. – Tim