Next: Manipuler la structure de Up: Options Statiques Previous: Le typage statique avec

Optenir l'adresse d'une méthode

Le seul moyen de circonvenir l'édition de lien dynamique est d'obtenir l'adresse d'une méthode et de l'apeller directement comme une fonction. Ceci peut être utile si la méthode doit être appellée de façons répétitive un grand nombre de fois, et que vous voulez éviter le coût de la gestion de message à chaque fois. En utilisant la méthode définie sur la classe Object methodFor: vous pouvez demander un pointeur sur la procédure qui implémente la méthode, et d'utiliser en suite ce pointeur pour appeler la procédure. Le pointeur que retourne methodFor: doit être proprement casté sur le bon type de fonction, le type des arguments et de la valeur de retour doivent être explicités.

L'exemple suivant montre comment la méthode setTag: peut être appellée :

id (*setter)(id, SEL, int); int i;

setter = (id (*)(id, SEL, int))[target methodFor:@selector(setTag:)];

for ( i = 0; i < 1000, i++ ) setter(targetList[i], @selector(setTag::), i);

Les deux premier arguments passés à la procédure sont le receveur (self) et le sélecteur (_cmd) . Ces argument qui sont cachés dans la syntaxe des methodes doivent être utilisé explicitement quand la méthode est appellée comme une fonction.

L'utilisation de la méthode methodFor: pour circonvenir l'édition de lien dynamique sauve presque tous le temps perdu en gestion de message, mais le gain ne devient sensible uniquement quand un message se vois répété un grand nombre de fois comme dans la boucle précédente.



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