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
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.
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.
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
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];
- 1. ¿Hay alguna diferencia entre log4net.Config.BasicConfigurator.Configure() y log4net.Config.XmlConfigurator.Configure()?
- 2. ¿Hay alguna diferencia entre! == y! = En PHP?
- 3. ¿Hay alguna diferencia entre System.Windows.Clipboard y System.Windows.Forms.Clipboard?
- 4. ¿Hay alguna diferencia entre (local), '.' y localhost?
- 5. ¿Hay alguna diferencia entre SSLv3 y TLS1.0?
- 6. ¿Hay alguna diferencia entre is_int() y ctype_digit()?
- 7. ¿Hay alguna diferencia entre readonly y {get; }
- 8. ¿Hay alguna diferencia entre `ListView.invalidateViews()` y 'Adapter.notifyDataSetChanged()'?
- 9. ¿Hay alguna diferencia entre: window.localStorage y localStorage?
- 10. ¿Hay alguna diferencia entre .NET y ASP.NET
- 11. ¿Hay alguna diferencia entre MsgBox y MessageBox.Show?
- 12. ¿Hay alguna diferencia entre gluLookAt() y glFrustum()?
- 13. ¿Hay alguna diferencia entre DataTable.Clear y DataTable.Rows.Clear?
- 14. ¿Hay alguna diferencia entre CPython y Python
- 15. ¿Hay alguna diferencia entre UITableViewCellAccessoryDetailDisclosureButton y UITableViewCellAccessoryDisclosureIndicator
- 16. ¿Hay alguna diferencia entre RPC e IPC?
- 17. ¿Hay alguna diferencia entre 'imprimir' y 'eco' en PHP?
- 18. ¿Hay alguna diferencia entre comillas simples y dobles en Java?
- 19. ¿Hay alguna diferencia entre una entidad y un objeto?
- 20. ¿Hay alguna diferencia entre un CGRect y un NSRect?
- 21. ¿Hay alguna diferencia entre SqlConnection.CreateCommand y el nuevo SqlCommand?
- 22. ¿Hay alguna diferencia entre int & a y int & a?
- 23. ¿Hay alguna diferencia entre UTF8Encoding.UTF8.GetBytes y Encoding.UTF8.GetBytes?
- 24. ¿Hay alguna diferencia entre/\ s/g y/\ s +/g?
- 25. ¿hay alguna diferencia entre [Serializable] y [Serializable()] en C#?
- 26. ¿Hay alguna diferencia entre un control y un widget?
- 27. ¿Hay alguna diferencia entre myNullableLong.HasValue y myNullableLong! = Null?
- 28. ¿Hay alguna diferencia entre `new Image()` y `document.createElement ('img')`?
- 29. ¿Hay alguna diferencia importante entre Camping y Sinatra?
- 30. ¿Hay alguna diferencia entre x ++ y ++ x en java?
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 / –