Je dirais que c'est un peu plus compliquée que la précédente, les réponses des répondants pourrait suggérer... si vous voulez vraiment créer un sélecteur... et pas seulement "d'appeler l'un" que vous avez autour de la pose"...
Vous devez créer un pointeur de fonction qui sera appelée par votre "nouvelle" méthode.. donc pour une méthode comme [self theMethod:(id)methodArg];
, vous devez écrire...
void (^impBlock)(id,id) = ^(id _self, id methodArg) {
[_self doSomethingWith:methodArg];
};
et puis vous avez besoin de générer l' IMP
bloc dynamiquement, cette fois, en passant, "auto", l' SEL
, et de tous les arguments...
void(*impFunct)(id, SEL, id) = (void*) imp_implementationWithBlock(impBlock);
et l'ajouter à votre classe, avec une méthode précise de signature pour l'ensemble de la ventouse (dans ce cas - "v@:@"
, de retour void, objet de l'appelant, l'objet de l'argumentation)
class_addMethod(self.class, @selector(theMethod:), (IMP)impFunct, "v@:@");
Vous pouvez voir quelques bons exemples de ce type de runtime manigances, dans l'un de mes repos, ici.