Quand la fonction de message trouve la procédure qui implémente une méthode, elle appelle cette procédure avec tous les arguments du message. Elle passe aussi deux arguments cachés qui sont :
Les méthodes réfères au receveur par la variable self et au sélecteur par _cmd. Dans l'exemple suivant _cmd est le sélecteur de la méthode etrange et self est l'instance qui reçoit le message etrange.
- etrange
{
id cible = leReceveur();
SEL action = laMethode();
if ( cible == self || action == _cmd )
return nil;
return [cible perform:action];
}
La variable self est la plus utile, c'est grâce à elle que les variables d'instances sont dans la portée de la méthode.
L'usage est de faire retourner self aux méthodes qui n'ont pas de valeur de retour spécifique. Ceci permet d'écrire des messages imbriqués dans le source, comme par exemple:
[[[maMatrix setMode:NX_RADIOMODE] setEnabled:YES] setTag:99];
La variable self est détaillé dans la section suivante.