objective c - ¿Qué es exactamente super en Objective-C?
objective-c-runtime (4)
¿Estas publicaciones en el blog sobre qué es una clase meta? , obtener subclases y clases y metaclases puede darte una idea de lo interno de esto.
Hasta donde yo sé, es un puntero a la superclase. Está cableado con la superclase y no se descifra dinámicamente en el tiempo de ejecución. Me gustaría saber más en detalle ...
¿Nadie?
Es una palabra clave que es equivalente a self
, pero inicia su búsqueda de envío de mensajes con la tabla de métodos de la superclase.
super
no es un puntero a una clase. Super es self
, pero cuando se utiliza en una expresión de mensaje, significa "buscar una implementación comenzando con la tabla de métodos de la superclase".
Esencialmente, le permite usar las implementaciones de la clase actual ''superclase.
Para conocer los details del tiempo de ejecución de Objective-C:
[super message]
tiene el siguiente significado:
Cuando encuentra una llamada a un método, el compilador genera una llamada a una de las funciones objc_msgSend, objc_msgSend_stret, objc_msgSendSuper u objc_msgSendSuper_stret. Los mensajes enviados a la superclase de un objeto (utilizando la palabra clave super) se envían utilizando objc_msgSendSuper; otros mensajes se envían utilizando objc_msgSend. Los métodos que tienen estructuras de datos como valores devueltos se envían utilizando objc_msgSendSuper_stret y objc_msgSend_stret.
Entonces, sí, es estático y no está determinado en tiempo de ejecución.