débutant `m en c objectif et j'ai quelques questions:des questions Objective-C
Qu'est-ce qu'un IMP?
Qu'est-ce que la fonction msgSend?
débutant `m en c objectif et j'ai quelques questions:des questions Objective-C
Qu'est-ce qu'un IMP?
Qu'est-ce que la fonction msgSend?
L'IMP est un pointeur IMplementation, qui est essentiellement le crochet qui détermine ce qui sera exécuté à la réception d'un message (comme la longueur de foo). Vous n'avez généralement pas besoin d'eux, sauf si vous êtes en bas et sale; Il est généralement plus facile de gérer les sélecteurs.
6.1 Qu'est-ce qu'un IMP?
It's the C type of a method implementation pointer, a function
pointeur à la fonction qui implémente une méthode Objective-C. Elle est définie revenir id et prend deux arguments cachés, l'auto et _cmd:
typedef id (*IMP)(id self,SEL _cmd,...); 6.2 How do I get an IMP given a SEL ? This can be done by sending a methodFor: message : IMP myImp = [myObject methodFor:mySel]; 6.3 How do I send a message given an IMP ? By dereferencing the function pointer. The following are all equivalent : [myObject myMessage]; or IMP myImp = [myObject methodFor:@selector(myMessage)]; myImp(myObject,@selector(myMessage)); or [myObject perform:@selector(myMessage)];
De l'article 6.1 de la Objective C FAQ. En ce qui concerne le msgSend, vous invoquez un message distant sur un autre objet; objc_msgSend (foo, @ selector (bar)) est à peu près le même que [foo bar]. Mais ce sont tous des détails d'implémentation de bas niveau; vous avez rarement (ou jamais) besoin d'utiliser les appels étendus pour le code Objective C, puisque vous pouvez faire @selector pour obtenir une méthode et executerSelector: pour l'invoquer sur n'importe quel objet.