Objective-C Language IMP (pointeur d'implémentation)


Exemple

IMP est un type C faisant référence à l'implémentation d'une méthode, également appelée pointeur d'implémentation. C'est un pointeur sur le début d'une implémentation de méthode.

Syntaxe:

id (*IMP)(id, SEL, …)

IMP est défini par:

typedef id (*IMP)(id self,SEL _cmd,…);

Pour accéder à cet IMP, le message «methodForSelector» peut être utilisé.

Exemple 1:

IMP ImpDoSomething = [myObject methodForSelector:@selector(doSomething)];

La méthode adressée par l'IMP peut être appelée en déréférencant l'IMP.

ImpDoSomething(myObject, @selector(doSomething));

Donc, ces appels sont égaux:

 myImpDoSomething(myObject, @selector(doSomething));
[myObject doSomething]
[myObject performSelector:mySelector]
[myObject performSelector:@selector(doSomething)]
[myObject performSelector:NSSelectorFromString(@"doSomething")];

Exemple: 2:

SEL otherWaySelector = NSSelectorFromString(@“methodWithFirst:andSecond:andThird:");

IMP methodImplementation  = [self methodForSelector:otherWaySelector];

result = methodImplementation( self,
                          betterWaySelector,
                          first,
                          second,
                          third );

NSLog(@"methodForSelector : %@", result);

Ici, nous appelons [NSObject methodForSelector qui nous renvoie un pointeur sur la fonction C qui implémente réellement la méthode, que nous pouvons appeler ensuite directement.