web-dev-qa-db-fra.com

Quel est exactement super dans Objective-C?

Pour autant que je sache, c'est un pointeur vers la superclasse. Il est câblé avec la superclasse et n'est pas déterminé dynamiquement lors de l'exécution. Je voudrais le savoir plus en détail ...

N'importe qui?

48
dontWatchMyProfile

super

Essentiellement, il vous permet d'utiliser les implémentations de la superclasse de la classe actuelle.

Pour le granuleuxdétails du runtime Objective-C:

[super message] a la signification suivante:

Lorsqu'il rencontre un appel de méthode, le compilateur génère un appel à l'une des fonctions objc_msgSend, objc_msgSend_stret, objc_msgSendSuper ou objc_msgSendSuper_stret. Les messages envoyés à la superclasse d'un objet (à l'aide du mot clé super) sont envoyés à l'aide de objc_msgSendSuper; les autres messages sont envoyés à l'aide de objc_msgSend. Les méthodes qui ont des structures de données comme valeurs de retour sont envoyées à l'aide de objc_msgSendSuper_stret et objc_msgSend_stret.

Donc oui, il est statique et non déterminé lors de l'exécution.

46
Ben S

C'est un mot clé équivalent à self, mais commence sa recherche de répartition des messages avec la table de méthodes de la superclasse.

29
Chuck

super est pas un pointeur vers une classe. Super est self, mais lorsqu'il est utilisé dans une expression de message, cela signifie "rechercher une implémentation commençant par la table de méthodes de la superclasse".

19
NSResponder

Ces articles de blog sur qu'est-ce qu'une méta-classe? , obtention de sous-classes et classes et métaclasses peuvent vous donner un aperçu des aspects internes de cela.

5
David Gelhar