2009-06-14 22 views
7

Cuando se escribe Cocoa y se implementa un método de clase que acepta un delegado y uno o más selectores para utilizar para sus devoluciones, ¿la terminología cambia de "delegado" y "selectores" a "objetivo" y "acción"? Más al punto, es "delegado" limitado solo cuando mi clase es la que recibe llamada, pero no cuando mi clase es haciendo la llamada?¿Hay alguna diferencia entre delegate/selector y target/action?

Respuesta

12

Los delegados generalmente se implementan usando Protocols en lugar de selectores. Esta es una forma más formal de comunicación entre clases, y es principalmente útil cuando hay más de un método que pueda ser necesario.

Objetivo/Acción se utiliza generalmente para corresponder a una situación de "evento similar", como un clic, un disparo del temporizador, etc.

+0

Ahora lo entiendo - lo estoy haciendo mal. Esa sería la razón por la que me resulta confuso :) También me sirvió de ayuda esta página, que cubre el error "methodName not in protocol" con el que me encontré casi de inmediato: http://www.mobileorchard.com/idprotocol-retainrelease-and -protocol-herencia / –

3

Para más detalles sobre la respuesta de NilObject, los delegados se implementan a través de protocolos con una serie de métodos "estandarizados". Si tiene varios objetos, cada uno de la misma clase compartiendo el mismo delegado, no podrá distinguir entre el remitente. Por lo tanto, usted ve - (nulo) delegateCallback: (id) emisor el puntero del remitente le permite hacer esta asociación.
Para hacer esta comparación se requerirá una referencia al remitente como una propiedad o variable global, esto también lo hace más fácil si libera manualmente su objeto ya que puede establecer las propiedades de los objetos a cero antes de liberarlo (para evitar punteros a basura))

Como alternativa, puede utilizar el método selector para pasar su propio método de devolución de llamada, esta técnica es buena ya que no requiere la referencia para una comparación con el remitente (id) y puede tener una devolución de llamada de método cada objeto que inicializas Por otro lado, la falta de referencia significa que si sueltas este objeto no podrás establecer las propiedades en cero.

1

Creo que hay una diferencia en el nivel de diseño.

Tomemos un componente que está especializado para hacer algunas cosas. Tanto Delegation como targetAction facilitarían (alguna forma de) comunicación entre nuestro componente y el objeto que lo consume.

Por lo general, qué forma de comunicación se desea define si se debe usar Target Action o Delegation.

1. ¿Qué se está comunicando?

acción de destino es más adecuado cuando la comunicación está limitada a control de (eventos, estado, etc)

Delegación es mucho más flexible y tiene amplias aplicaciones. Entonces puedo usar la delegación para enviar y recibir datos entre 2 objetos.

2. ¿Cómo

Hasta ahora he visto Acción destino a la mayoría manifiesta 1-Way comunicación

Con Delegación he hecho a mí mismo 2 vías de comunicación por tener métodos que devuelvan valores

0
Target - the object which is going to respond for your action. 
Action - the method which is triggered by your action 
Delegates - Majorly used for callback mechanism, implemented using "@protocols". 
Selector - also can be used as callback method:

Ej:

SEL mySelector = @selector(myTimerCallback:); 
    [NSTimer scheduledTimerWithTimeInterval:30.0 target:obj selector:mySelector userInfo:nil repeats:YES]; 
Cuestiones relacionadas