Cuál es la diferencia entre un método, un selector y un mensaje en Objective-C?

3 Comentarios

  1. 138

    Esta es una gran pregunta.

    • Selector de – un Selector es el nombre de un método. Estás muy familiarizado con estos selectores: alloc, init, release, dictionaryWithObjectsAndKeys:, setObject:forKey:, etc. Tenga en cuenta que el colon es la parte del selector; es la manera de identificar que este método requiere parámetros. También (aunque es muy raro), puede tener selectores como este: doFoo:::. Este es un método que toma tres parámetros, y te invoca como [someObject doFoo:arg1 :arg2 :arg3]. No hay ningún requisito de que hay cartas antes de cada parte de el selector de componentes. Como ya he dicho, esto es muy raro, y no te será utilizado en el Cacao marcos. Usted puede trabajar con los selectores directamente en el Cacao. Que tienen el tipo SEL: SEL aSelector = @selector(doSomething:) o SEL aSelector = NSSelectorFromString(@"doSomething:");

    • Mensaje – un mensaje es un selector y los argumentos que se están enviando con ella. Si digo [dictionary setObject:obj forKey:key], entonces el «mensaje» es el selector setObject:forKey: además de los argumentos obj y key. Los mensajes pueden ser encapsulados en un NSInvocation objeto para su posterior invocación. 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 aplicación (y el acompañamiento de los metadatos). La «aplicación» es el bloque de código; es un puntero a función (un IMP). Un método real puede ser recuperada de manera interna mediante un Method struct (recuperable desde el tiempo de ejecución).


    Algunas otras cosas relacionadas, que no pregunte por:

    • Firma del método – una firma de método representa los tipos de datos devueltos por y aceptado por un método. Éstos pueden ser representados en tiempo de ejecución a través de un NSMethodSignature y (en algunos casos) un raw char*.

    • Aplicación el código ejecutable de un método. Su tipo en tiempo de ejecución es un IMP, y es en realidad un puntero a función. iOS 4.3 incluye una nueva habilidad para girar un bloque en un IMP. Este es genial.

    Una de las cosas divertidas que dan cuenta es que el nombre de un método (el seleccionador) es distinta de la aplicación de el método (el diablo). Esto significa que usted puede cambiar todo, si te sientes atrevido. También puede agregar y quitar métodos en tiempo de ejecución, porque todo lo que estamos haciendo es la edición de una entrada en una tabla hash: la clave es el selector, y el valor es el IMP del método. Esto le permite hacer algo realmente loco y trippy cosas. No es para los débiles de corazón. 🙂

    • Esta es una gran ayuda 😀 1. así selector es más parecida a la firma del/la ruta de para el método en sí? Dejar que el compilador sabe, esta es la forma de encontrar? 2. Lo que creo que esto es más eficaz que pasando el método en sí. A la derecha? 3. Porque cada selector y método 1:1 relación de la nave y porque de esta eficiencia es que ¿por qué no pasas el método. 4. También se le puede dar un tonto ejemplo de también puede agregar y quitar métodos en tiempo de ejecución siempre he oído hablar de él, pero nunca nunca he necesitado hacer, ni visto yo creo .
    • 5a. Es que me puede pasar un parámetro condicional que cambia entre los selectores? 5b. en lugar de pasar un parámetro condicional para el selector…¿por qué no crear un método con un if declaración? Supongo que es porque sin el ifs nuestros métodos a ser más puro método que hacer lo que su dicho. Concluyendo que, ‘estado ‘ manipulación’ y la ‘acción’ que giran a su alrededor no debe estar en el mismo método.
  2. 9

    Un método es la aplicación que se ejecuta cuando un objeto o una clase se le pide que realice alguna acción. Es en el ámbito de su clase que las contiene y por lo tanto es diferente cuando se hace referencia a través de alguna otra clase. Un selector es un identificador que representa el nombre de un método. No está relacionado con ninguna clase específica o método, y puede ser utilizado para describir un método de cualquier clase, si es una clase o un método de instancia.

    Simplemente, un selector es una clave en un diccionario. Se puede decir ¿cuál es el método que alguien está hablando, pero sólo si usted también tiene el diccionario en sí (la clase o el objeto). El método es lo que se obtiene cuando se pregunta por el valor del diccionario mediante el selector como clave.

  3. 1

    Este sitio tiene una buena visión general de toda la terminología en cuestión: http://www.otierney.net/objective-c.html

    De comprobar el enlace, pero te voy a dar un resumen rápido:

    Un método es, esencialmente, como un método de la función para la que están acostumbrados en su lenguaje de programación favorito.

    Un mensaje (del artículo) «Un mensaje puede ser dinámicamente reenvía a otro objeto. Llamar a un mensaje en un objeto en Objective-C no significa que el objeto implementa ese mensaje, sólo que no sabe cómo responder a él de alguna manera a través de implementar directamente o reenviar el mensaje a un objeto que no sé cómo.»

    Selectores puede significar dos cosas. Se puede hacer referencia al nombre de un método, o «hace referencia al identificador único que reemplaza el nombre cuando el código fuente es compilado. Compilado de los selectores son de tipo SEL.» (de: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocSelectors.html)

Dejar respuesta

Please enter your comment!
Please enter your name here