2012-01-28 9 views
7

Por lo que tengo entendido, Objective C es un lenguaje mucho más dinámico que C# o Java. En C#, solo puede conocer la clase del objeto llamante (utilizando stacktrace) pero no la referencia de instancia de la persona que llama.¿Puede el objetivo C determinar la referencia del objeto llamante en el tiempo de ejecución (reflexión)?

¿Es el objetivo C más capaz para esto?

Actualización: Miré la otra publicación aquí How can I determine the "caller" of my method in Objective-C?. Por lo que yo entiendo, solo da el nombre de la clase. Insisto en que no me interesa solo el nombre de la clase, sino que obtengo una referencia a la persona que llama al instancia.

+0

En lugar de reiterar lo desea, explique qué es lo que está tratando de hacer. Obtener la instancia de llamada no es posible en Objective-C, pero su problema de nivel superior puede resolverse de una manera diferente. –

Respuesta

6

Esto ya ha sido contestada aquí:

How can I determine the "caller" of my method in Objective-C?

La respuesta no es especialmente bonito sin embargo. Parece que no hay una manera simple y confiable de hacerlo, aparte de cazar a través de la pila, que podría ser una versión del sistema operativo o dependiente de la plataforma.

¿Por qué exactamente quieres hacer esto? Tal vez haya otra solución a su problema.

+0

Miré la otra publicación. Por lo que yo entiendo, solo da el nombre de la clase. No estoy interesado solo por el nombre de clase sino por la instancia en sí. – user310291

+0

Entonces probablemente no sea posible. Como han dicho otros, el sistema de envío de mensajes Objective-C gira en torno a la función objc_msgSend(), que toma un parámetro llamado y selector, pero no el llamador. –

5

Por lo que yo sé, no puede obtener incluso la clase de la persona que llama. Todas las llamadas a métodos en Objective-C se enrutan a través de objc_msgSend(), que toma el receptor, un selector y los parámetros del método como parámetros.

El receptor será self y el selector _cmd. La persona que llama no está involucrada en la llamada al método. Solo puedes volver al trazado de la pila para saber dónde se ha llamado el método.

+0

stack trace solo da el nombre de clase not instance ref por lo que puedo leer http://tombarta.wordpress.com/2008/08/01/c-stack-traces-with-gcc/ – user310291

Cuestiones relacionadas