Question

Je veux installer une table d'expédition Méthode et je me demande s'il est possible de créer pointeur vers une méthode en Objective-C (comme pointeur de fonction en C). J'ai essayé d'utiliser certaines fonctions d'exécution Objective-C pour changer de façon dynamique des méthodes, mais le problème est-il affectera tous les cas.

Comme je suis très nouveau à Objective-C, un exemple illustré serait très appréciée.

Était-ce utile?

La solution

méthodes Objective-C sont appelés selectors, et sont représentés par le type de données SEL. Si votre objet hérite de NSObject, vous pouvez lui dire d'effectuer un sélecteur (à savoir appeler une méthode) comme ainsi:

SEL selector = @selector(doSomething:);
[obj performSelector:selector withObject:argument];

Cela suppose que vous avez défini une méthode telle que:

-(void)doSomething:(MyObject*)arg;

Selectors sont affectés à SEL par le mot-clé des types de données de @selector, qui prend le nom de la méthode que vous souhaitez conserver. Le nom de la méthode est le nom de la méthode dépouillée de tous les arguments. Par exemple:

-(void)doSomething:(MyObject*)arg withParams:(MyParams*)params

Serait référencé @selector(doSomething:withParams:).

Autres conseils

Oui! En Objective-C, les pointeurs de fonction sont appelés sélecteurs. Si vous avez une méthode définie comme ceci:

- (void)myFunctionWithObject:(NSObject*)obj otherObject:(NSNumber*)obj2
{
}

Le sélecteur est déclarée comme ceci:

@selector(myFunctionWithObject:otherObject:)

Pour effectuer un sélecteur sur un objet, vous pouvez utiliser:

[object performSelector:@selector(myFunction)];

ou

[object performSelector:@selector(myFunctionTakingParameter:) withObject: o];

Le sélecteur de type de données est particulièrement utile pour les discussions et les minuteries, où vous pouvez distribuer un fil et de fournir un sélecteur au message que vous souhaitez qu'il Invoke. Si vous avez besoin pour créer un tableau de sélecteurs (ou une table d'expédition), ou si vous avez besoin d'invoquer des sélecteurs avec plusieurs paramètres, vous pouvez utiliser la classe NSInvocation. Il fournit une enveloppe pour un sélecteur et vous permet de spécifier des arguments réels.

Vous devez garder à l'esprit que l'objectif-C est déjà basé sur une table de répartition de la méthode entièrement dynamique. On dirait que le maintien des pointeurs de fonction en utilisant les sélecteurs fonctionnera bien pour vous si vous avez juste besoin d'une référence à une fonction, cependant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top