2010-06-22 8 views

Respuesta

45

super

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.

+0

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

27

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.

18

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".

+2

Esto no es cierto para los métodos de clase. –