¿Cuál es la diferencia entre un método, un selector y un mensaje en Objective-C?¿Cuál es la diferencia entre un método y un selector?
Respuesta
Esta es una gran pregunta.
Selector - un selector es el nombre de un método. Está muy familiarizado con estos selectores:
alloc
,init
,release
,dictionaryWithObjectsAndKeys:
,setObject:forKey:
, etc. Tenga en cuenta que los dos puntos son parte del selector; es cómo identificamos que este método requiere parámetros. Además (aunque es extremadamente raro), puede tener selectores como este:doFoo:::
. Este es un método que toma tres parámetros e invocarlo como[someObject doFoo:arg1 :arg2 :arg3]
. No es necesario que haya letras antes de cada parte de los componentes del selector. Como dije, esto es extremadamente raro, y no lo encontrará utilizado en los marcos de Cocoa. Puede trabajar con selectores directamente en Cocoa. Tienen el tipoSEL
:SEL aSelector = @selector(doSomething:)
oSEL aSelector = NSSelectorFromString(@"doSomething:");
mensaje - un mensaje es un selector y los argumentos para enviar con él. Si digo
[dictionary setObject:obj forKey:key]
, entonces el "mensaje" es el selectorsetObject:forKey:
más los argumentosobj
ykey
. Los mensajes se pueden encapsular en un objetoNSInvocation
para una invocación posterior. Los mensajes se envían a un receptor . (es decir, el objeto que "recibe" el mensaje).Método - un método es una combinación de un selector y una implementación (y los metadatos que lo acompañan).La "implementación" es el bloque real de código; es un puntero a la función (un
IMP
). Un método real se puede recuperar internamente usando una estructuraMethod
(recuperable desde el tiempo de ejecución).
Algunas otras cosas relacionadas que no pidió:
método de firma - una firma de método representa los tipos de datos devueltos por y aceptados por un método. Se pueden representar en tiempo de ejecución a través de
NSMethodSignature
y (en algunos casos) en brutochar*
.Implementación - el código ejecutable real de un método. Su tipo en tiempo de ejecución es
IMP
, y en realidad es solo un puntero de función. iOS 4.3 incluye una nueva capacidad para convertir un bloque enIMP
. Esto es realmente genial.
Una de las cosas divertidas que se dan cuenta es que el nombre de un método (el selector) es distinta de la aplicación del método (IMP). Esto significa que puedes intercambiarlos, si te sientes audaz. También puede agregar y eliminar métodos en tiempo de ejecución, ya que todo lo que hace es editar una entrada en una tabla hash: la clave es el selector y el valor es IMP
del método. Esto te permite hacer cosas realmente locas y trippy. No es para los débiles de corazón. :)
Un método es la implementación que se ejecuta cuando se le pide a un objeto o clase que realice alguna acción. Está en el ámbito de su clase contenedora y, por lo tanto, es diferente cuando se hace referencia a ella a través de otra clase. Un selector es un identificador que representa el nombre de un método. No está relacionado con ninguna clase o método específico, y se puede utilizar para describir un método de cualquier clase, ya sea una clase o método de instancia.
Simplemente, un selector es como una tecla en un diccionario. Puede decirle de qué método está hablando alguien, pero solo si también tiene el diccionario en sí (la clase o el objeto). El método es lo que obtienes cuando solicitas el valor del diccionario usando el selector como clave.
Este sitio tiene una buena visión general de toda la terminología en cuestión: http://www.otierney.net/objective-c.html
consulte el enlace, pero me daré un breve resumen:
Un método es esencialmente como un método de función que estás acostumbrado en tu lenguaje de programación favorito.
Un mensaje (del artículo) "Un mensaje se puede reenviar dinámicamente a otro objeto. Llamar a un mensaje sobre un objeto en Objective-C no significa que el objeto implemente ese mensaje, solo que sabe cómo responder de alguna manera a través de implementarlo directamente o reenviar el mensaje a un objeto que sí sabe cómo hacerlo ".
Los selectores pueden significar dos cosas. Puede hacer referencia al nombre de un método, o "se refiere al identificador único que reemplaza el nombre cuando se compila el código fuente. Los selectores compilados son del tipo SEL". (desde: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocSelectors.html)
- 1. ¿Cuál es la diferencia entre un algoritmo y un método
- 2. ¿Cuál es la diferencia entre $ each (selector) y .Cada $ (selector)()
- 3. ¿Cuál es la diferencia entre un método y una función?
- 4. ¿Cuál es la diferencia entre .closest() y .parents ('selector')?
- 5. ¿Cuál es la diferencia entre redefinir un método y anular un método?
- 6. ¿Cuál es la diferencia entre un predicado y un funcionador?
- 7. Cuál es la diferencia entre un subproceso y un controlador
- 8. ¿Cuál es la diferencia entre un controlador y un servicio?
- 9. ¿Cuál es la diferencia entre un lenguaje y un marco?
- 10. ¿Cuál es la diferencia entre un ayudante y un parcial?
- 11. ¿Cuál es la diferencia entre un nanokernel y un exokernel?
- 12. ¿Cuál es la diferencia entre un árbol y un directorio?
- 13. ¿Cuál es la diferencia entre un HashMap y un TreeMap?
- 14. ¿Cuál es la diferencia entre un vector y un vértice?
- 15. ¿Cuál es la diferencia entre un REPL y un intérprete?
- 16. ¿Cuál es la diferencia entre un IORef y un MVar?
- 17. ¿Cuál es la diferencia entre un JavaBean y un POJO?
- 18. ¿Cuál es la diferencia entre un "nonce" y un "GUID"?
- 19. ¿Cuál es la diferencia entre un método sincronizado y un bloque sincronizado en Java?
- 20. En C# ¿cuál es la diferencia entre un destructor y un método Finalize en una clase?
- 21. ¿Cuál es la diferencia entre @ y @@ en un módulo?
- 22. ¿Cuál es la diferencia entre un hilo y una fibra?
- 23. ¿Cuál es la diferencia entre un algoritmo y una función?
- 24. ¿Cuál es la diferencia entre una matriz y un objeto?
- 25. ¿Cuál es la diferencia entre una mónada y un cierre?
- 26. ¿Cuál es la diferencia entre nohup y un daemon?
- 27. ¿Cuál es la diferencia entre una instancia y un objeto?
- 28. ¿Cuál es la diferencia entre un tema y una plantilla?
- 29. ¿Cuál es la diferencia entre un RoutedCommand y una RoutedUICommand?
- 30. ¿Cuál es la diferencia entre GenericServlet, HttpServlet y un Servlet?
Relacionados: [¿Método de llamada o mensaje de envío?] (Http://stackoverflow.com/questions/2852381/calling-a-method-or-sending-a-message-in-objective-c) [Método call o performSelector] (http://stackoverflow.com/questions/2674827/using-self-method-or-selectormethod) Similar: [Diferencia entre firma y selector] (http://stackoverflow.com/questions/3095015/whats -la-diferencia-entre-el-método-firma-y-el-selector-en-objetivo) –