Hasta donde 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 detalladamente ...¿Qué es exactamente súper en Objective-C?
¿Alguien?
Hasta donde 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 detalladamente ...¿Qué es exactamente súper en Objective-C?
¿Alguien?
En esencia, se le permite utilizar las implementaciones de la superclase actual clase.
Para el grittydetails del tiempo de ejecución de Objective-C:
[super message]
tiene el siguiente significado:
Cuando encuentra una llamada de método, el compilador genera una llamada a uno 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 usando objc_msgSendSuper; otros mensajes son enviados usando objc_msgSend. Los métodos que tienen estructuras de datos como valores de retorno se envían usando objc_msgSendSuper_stret y objc_msgSend_stret.
Así que sí, es estática y no determina en tiempo de ejecución.
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
es no un puntero a una clase. Super es self
, pero cuando se utiliza en una expresión de mensaje, significa "buscar una implementación que comience con la tabla de métodos de la superclase".
Esto no es cierto para los métodos de clase. –
Estas publicaciones en el blog en what is a meta class?, getting subclasses y classes and metaclasses pueden darle una idea de lo interno de esto.
Posiblemente causa una nueva pregunta, pero 'super' se comporta de manera extraña (o" normalmente ", si piensas así) en categorías. Es decir, trata la categoría como una subclase (no una anulación), por lo que 'super' es la clase original no modificada. Más o menos A veces. "Es complicado." – Olie