No puedo encontrar esta respuesta en ningún lado. ¿Qué significa cuando hay un parámetro de remitente en un encabezado de método? ¿Representa la instancia que lo llamó o el método que lo llamó?¿Qué es el remitente?
Respuesta
No hay magia involucrada. Probablemente estés hablando de los métodos vinculados a algunos elementos de la interfaz de usuario por Interface Builder, ¿verdad?
- (IBAction) userDidPressButton: (id) sender {...}
El IBAction es una macro que se expande hasta el vacío. Es simplemente un azúcar sintáctico que marca los métodos que desea que estén disponibles en Interface Builder. Ahora, al conectar este método hasta cierto elemento de la interfaz, por ejemplo un botón, IB llama al método addTarget ... en el botón:
[button addTarget:yourObject action:@selector(userDidPressButton:) forEvent:...];
Y cuando se pulsa el botón, se pasa a través de su lista de acciones e incendios el userDidPressButton, pasando a sí mismo como el primer argumento. Probablemente no sea tan útil para los botones, pero también puede usar el mismo mecanismo para obtener eventos de cambio desde un control deslizante, y en ese caso puede usar el argumento del remitente para obtener el valor del control deslizante.
¿Qué significa cuando hay un parámetro de remitente en un encabezado de método? ¿Representa la instancia que lo llamó o el método que lo llamó?
Mire el tipo de argumento. Es probable que sea id
. Ese es el tipo de un puntero de objeto. Tiene razón en que es la instancia que envió el mensaje.
se puede pasar un selector mensaje a un mensaje, pero el tipo de esto es SEL
, no id
. Del mismo modo, puede pasar una implementación de método a un mensaje, pero el tipo para eso es IMP
, no id
.
Los métodos que toman un solo argumento sender
son típicamente métodos de acción, generalmente identificados por el tipo de devolución IBAction
. Como dijo Zoul, IBAction
se expande a void
para el compilador, lo que indica que el método no devuelve un valor. El motivo para tener IBAction
es que Interface Builder busca métodos con IBAction
como tipo de devolución y los detecta como acciones a las que puede conectar un control. Para obtener más información sobre Cocoa (Mac OS X), consulte “The Target-Action Mechanism” in the Cocoa Fundamentals Guide y Control and Cell Programming Topics for Cocoa.
Para obtener más información sobre Cocoa Touch (iPhone/iPod touch/iPad), consulte “The Target-Action Mechanism” in the UIControl class reference.
Por supuesto, hay muchas formas técnicas de describir esto, Pero en teoría 'no no', el argumento del remitente que pasa es solo el objeto GUI que lo pasa.
Así que si vincula este método a un botón específico, llamaremos a Button1, el remitente es Button1, y con él viene toda la información disponible para el botón. Tamaño, texto, etc.
Espero que esto haya sido suficiente.
Bryan
- 1. Objetivo C: ¿qué es un "remitente (id)"?
- 2. Crear eventos personalizados: ¿remitente de objeto o remitente con tipo?
- 3. parámetro de evento; "remitente como Objeto", o "remitente como T"?
- 4. "k.send: hello" - si k es el "receptor", ¿quién es el remitente?
- 5. ¿Cómo determinar qué tipo de objeto es el remitente de un evento?
- 6. Remitente Objeto y EventArgs
- 7. Google App Engine copiando el remitente
- 8. MailMessage configurando el nombre del remitente
- 9. ¿Cómo obtener el remitente de un intento?
- 10. Cómo determinar el remitente de Broadcast Intent
- 11. ¿Redireccionamiento de JavaScript basado en el remitente?
- 12. Cambiar el remitente de sendmail usando bash
- 13. Selector de UITapGestureRecognizer, el remitente es el gesto, no el objeto ui
- 14. Obtención del remitente en jQuery
- 15. Cómo configurar el nombre del remitente para el correo electrónico?
- 16. En un controlador de eventos C#, ¿por qué el parámetro "remitente" debe ser un objeto?
- 17. ¿Es posible ocultar/Cambiar el número de teléfono del remitente al enviar sms en Android?
- 18. InvalidSenderError: remitente no autorizado (Google App Engine)
- 19. iOS: ¿Hay alguna manera de determinar de qué UIControlEvent proviene el remitente?
- 20. ¿Cómo obtengo el puerto UDP del remitente en C?
- 21. MailMessage, diferencia entre el remitente y las propiedades From
- 22. AMQP/RabbitMQ remitente en AVR (Arduino)
- 23. Cómo obtengo el valor de la etiqueta del remitente
- 24. iOS: ¿Incluye el remitente en la declaración de IBAction?
- 25. Pasar eventos args y remitente a RelayCommand
- 26. Explique esto: CheckBox checkbox = (CheckBox) remitente;
- 27. ¿Qué es el escalamiento?
- 28. ¿Qué es el sombreado?
- 29. ¿Qué es el STL?
- 30. clase Remitente a GCM - Ejemplo - Java de App Engine
La segunda mitad de su respuesta cubre Cocoa Touch, pero es inexacto para cacao, donde cada control tiene un solo objetivo y acción a la vez. Las únicas excepciones son NSTableView y NSOutlineView, que todavía tienen solo un objetivo por instancia pero tienen dos selectores de acción por instancia (uno para clics, uno para clics dobles). –
Sí, solo trabajo con Cocoa Touch, gracias por la aclaración. – zoul