texto telcel puedo porque por moviles mensajes mensaje mandar los llegan fotos enviar entre desde como celular activar activan objective-c javascript

objective c - telcel - ''Llamar a un método'' O ''enviar un mensaje'' en el Objetivo C



porque no puedo enviar fotos desde mi iphone (5)

En una llamada a la función C, el compilador reemplaza el selector con una llamada a una función, y la ejecución salta en respuesta a la llamada a la función.

En Objective-C, los métodos están vinculados dinámicamente a los mensajes, lo que significa que los nombres de los métodos se resuelven en implementaciones en tiempo de ejecución. Específicamente, el objeto se examina en tiempo de ejecución para ver si contiene un puntero a una implementación para el selector dado.

Como consecuencia, Objective-C le permite cargar y vincular nuevas clases y categorías mientras se ejecuta, y realizar técnicas como swizzling, categorías, proxies de objetos y otros. Nada de esto es posible en C.

En C o en cualquier lenguaje basado en ECMAscript usted ''llama a un método o función pública'' en un objeto. Pero en la documentación del Objetivo C, no hay llamadas a métodos públicos, solo el envío de mensajes.

¿Hay algo de malo en pensar que cuando ''envías un mensaje'' en ObjC en realidad estás ''llamando a un método público en un objeto''?


Fue enseñado esto en mi clase de Java. Yo diría que solo tienen diferencias realistas en escenarios de multiproceso, donde el paso de mensajes es una técnica muy legítima y de uso frecuente.


No, no hay nada de malo en pensar así. Se llaman mensajes porque son una capa de abstracción sobre las funciones. Parte de esto proviene del sistema de tipos de Objective C. Una mejor comprensión de los mensajes ayuda a:

fuente completa en wikipedia (he seleccionado algunos de los temas más relevantes)

Los nombres internos de la función rara vez se utilizan directamente. Generalmente, los mensajes se convierten en llamadas de función definidas en la biblioteca de tiempo de ejecución de Objective-C. No se conoce necesariamente en el momento del enlace a qué método se llamará porque la clase del receptor (el objeto que se envía el mensaje) no necesita conocerse hasta el tiempo de ejecución.

del mismo artículo:

El modelo Objective-C de programación orientada a objetos se basa en el paso de mensajes a instancias de objetos. En Objective-C uno no llama a un método; uno envía un mensaje No se garantiza que el objeto al que se dirige el mensaje, el receptor, responda a un mensaje y, si no lo hace, simplemente genera una excepción. La programación estilo Smalltalk permite que los mensajes no se implementen, con el método resuelto para su implementación en tiempo de ejecución. Por ejemplo, se puede enviar un mensaje a una colección de objetos, a la que solo se espera que algunos respondan, sin temor a generar errores de tiempo de ejecución. (La plataforma Cocoa aprovecha esto, ya que todos los objetos en una aplicación Cocoa reciben el mensaje awakeFromNib: cuando se inicia la aplicación. Los objetos pueden responder ejecutando cualquier inicialización requerida en el lanzamiento.) El paso de mensajes tampoco requiere que se defina un objeto. en tiempo de compilación.


Teóricamente, son diferentes.

En la práctica, no tanto.

Son diferentes en que en Objective-C, los objetos pueden elegir no responder a los mensajes o reenviar mensajes a diferentes objetos, o lo que sea. En lenguajes como C, las llamadas a funciones en realidad son solo saltar a un punto determinado en la memoria y ejecutar código. No hay un comportamiento dinámico involucrado.

Sin embargo, en casos de uso estándar, cuando envía un mensaje a un objeto, el método que el mensaje representó generalmente terminará llamando. Entonces, aproximadamente el 99% del tiempo, enviar un mensaje resultará en llamar a un método. Como tal, a menudo decimos "llamar a un método" cuando realmente queremos decir "enviar un mensaje". En la práctica, casi siempre son iguales, pero no tienen que serlo .

Hace un tiempo, me puse filosófico sobre este tema y escribí un blog sobre él: http://davedelong.tumblr.com/post/58428190187/an-observation-on-objective-c

editar

Para responder directamente a su pregunta, generalmente no hay nada de malo en decir "llamar a un método" en lugar de "enviar un mensaje". Sin embargo, es importante comprender que existe una diferencia de implementación muy importante.

(Y aparte, mi preferencia personal es decir "invocar un método en un objeto")


Debido al envío dinámico de mensajes de Objective-C, el envío de mensajes es realmente diferente de llamar a una función C o a un método C ++ (aunque eventualmente, se llamará una función C). Los mensajes se envían a través de selectores al objeto receptor, que responde al mensaje invocando un IMP (un puntero de función C) o reenviando el mensaje a su superclase. Si ninguna clase en la cadena de herencia responde al mensaje, se lanza una excepción. También es posible interceptar un mensaje y reenviarlo a una clase completamente diferente (esto es lo que NSProxy subclases de NSProxy ).

Al usar Objective-C, no hay una gran diferencia entre el envío de mensajes y el método de llamada al estilo C ++, pero hay algunas implicaciones prácticas del sistema de transmisión de mensajes que conozco:

  1. Dado que el procesamiento del mensaje ocurre en tiempo de ejecución, en lugar de compilarse, no hay una forma de compilación para saber si una clase responde a un mensaje en particular. Esta es la razón por la que normalmente obtiene advertencias del compilador en lugar de errores cuando escribe incorrectamente un método, por ejemplo.
  2. Puede enviar de forma segura cualquier mensaje a nil , permitiendo modismos como [foo release] sin tener que preocuparse por verificar NULL.
  3. Como dice @CrazyJugglerDrummer, el envío de mensajes le permite enviar mensajes a muchos objetos a la vez sin preocuparse de si responderán a ellos. Esto permite protocolos informales y el envío de mensajes a todos los objetos en un contenedor.
  4. No estoy 100% seguro de esto, pero creo que las categorías (agregar métodos a clases ya existentes) son posibles a través del envío dinámico de mensajes.
  5. El envío de mensajes permite el reenvío de mensajes (por ejemplo, con subclases NSProxy ).
  6. El envío de mensajes le permite realizar pirateos interesantes de bajo nivel, como el método swizzling (intercambio de implementaciones de métodos en tiempo de ejecución).