Next: Un exemple Up: La gestion des messages Previous: Arguments cachés

Messages à self et super

La syntaxe des messages pose un problème dès qu'une méthode doit référer le receveur (l'objet qui reçoit le message). Supposons que l'on définisse une méthode reCentre qui change les coordonnées de l'objet sur lequel elle s'applique. Pour cela elle va utiliser la méthode moveTo:: pour réaliser le déplacement. Ce message doit donc être envoyé à l'objet receveur du message reCentre. Il n'est pas possible avant l'envoi du message reCentre de savoir quel objet l'on doit déplacer avec le message moveTo::. En effet le message reCentre peut être envoyé à tout un ensemble d'objets différents, de classes différentes, de nom différents :

- reCentre [??? moveTo:30.0 :50.0]; . . .

Pour résoudre ce problème ObjectiveC fournit deux termes qui se réfère à l'objet qui réalise la méthode se sont :

La méthode reCentre s'écrit donc soit:

- reCentre
{
[self moveTo:30.0 :50.0];
. . .
}
ou: - reCentre
{
[super moveTo:30.0 :50.0];
. . .
}

Ici self et super tous deux réfèrent l'objet receveur du message reCentre, quelque soit la classe de l'objet. Mais les deux termes sont bien différents, self est un des arguments cachés de la fonction de traitement des messages, c'est une variable locale qui peut être utilisée librement dans l'implémentation d'une méthode, comme les variables d'instance. super peut se substituer à self uniquement en tant que receveur dans un message. En position de receveur la différence des deux termes est dans le traitement du message:

La distinction entre self est super est réalisée à la compilation, avec l'utilisation de objc_msgSend dans le cas de super, et d'une autre fonction qui recherche directement dans la superclasse de l'objet receveur.

Next: Un exemple Up: La gestion des messages Previous: Arguments cachés

Dominique REVUZ
Vendredi 21 février 1997 17:27:12
Une Bug Un mail Merci