Une autre de mes questions sur optimizing Objective C programs a inspiré ce qui suit: quelqu'un a-t-il un court exemple utilisant SEL et IMP quand theMethod a deux (ou plus) entiers pour l'entrée?Objective-C et utilisation de SEL/IMP
Répondre
Voici un good tutorial pour obtenir l'IMP actuel (avec un aperçu des IMPs). Un exemple très basique des Lutins et est SELs:
- (void)methodWithInt:(int)firstInt andInt:(int)secondInt { NSLog(@"%d", firstInt + secondInt); }
SEL theSelector = @selector(methodWithInt:andInt:);
IMP theImplementation = [self methodForSelector:theSelector];
//note that if the method doesn't return void, you have to explicitly typecast the IMP, e.g. int(* foo)(id, SEL, int, int) = ...
Vous pouvez alors invoquer la IMP comme ceci:
theImplementation(self, theSelector, 3, 5);
Il n'y a généralement aucune raison de besoin PMIs à moins que vous faites voodoo sérieux - est y a-t-il quelque chose de spécifique que vous voulez faire?
@eman: vous devez convertir ce retour ainsi: void (* theImplementation) (id, SEL, int, int) = (void (*) (id, SEL, int, int)) [self methodForSelector: leSelecteur]; –
@Jason Coco-Corrigez-moi si je me trompe, mais je pense que IMP est typedef'd comme (id, SEL, ...), donc ça ne devrait pas avoir d'importance (bien que ce ne soit pas sûr, mais si vous avez besoin de sécurité, vous ne devriez probablement pas utiliser IMPs). – shosti
Vous avez raison, puisque cette méthode est nulle, c'est OK, mais vous obtiendrez des erreurs dans beaucoup d'autres instances. Vous/need/cast était probablement trop fort, vous/devriez toujours lancer/est probablement plus correct;) - mais étant donné cette question elle-même, je suppose que l'OP ne devrait probablement pas/ne pas utiliser IMP non plus. –
Maintenant que j'ai ce travail grâce à iman, je peux ajouter encore un autre exemple:
SEL [email protected](getRankOf:::::::);
IMP rankingMethod=[eval methodForSelector:cardSelector];
rankingMethod(eval, cardSelector, 0, 1, 2, 3, 4, 5, 6);
Je ne ai pas besoin de cela pour quelque chose d'utile, J'avais juste besoin de satisfaire ma curiosité! Merci encore.
Un autre bon lien sur l'optimisation d'Objective-C est http://www.mulle-kybernetik.com/artikel/Optimization/opti-3-imp-deluxe.html – SK9
Voici une autre alternative possible. Cela évite l'écrasement mais le talonnage ne fonctionne pas.
- (void)setUp
{
[super setUp];
[self [email protected](firstName) toClass:[User class]];
[self [email protected](lastName) toClass:[User class]];
}
- (void)addSelector:(SEL)selector toClass:(Class)class
{
NSString *uniqueName = [NSString stringWithFormat:@"%@-%@", NSStringFromClass(class), NSStringFromSelector(selector)];
SEL sel = sel_registerName([uniqueName UTF8String]);
IMP theImplementation = [class methodForSelector:sel];
class_addMethod(class, selector, theImplementation, "[email protected]:@");
}
- 1. alloca et ObjectiveC Garbage Collector
- 2. Analyseur AMF0 dans ObjectiveC
- 3. NSString question ObjectiveC
- 4. Personnalisation de writeToFile dans ObjectiveC
- 5. Combine chaîne en ObjectiveC
- 6. Reliure ObjectiveC classe C# problème
- 7. Aider avec le code GCC et ObjectiveC et Cygwin
- 8. Allocation de mémoire dynamique 2D - ObjectiveC
- 9. Chargement d'une séquence d'images dans InterfaceBuilder -ObjectiveC
- 10. MVC utilisé dans la programmation ObjectiveC
- 11. Créer un cercle/une bulle de couleur par programmation dans ObjectiveC et Cocoa
- 12. Puis-je placer un sélecteur ObjectiveC @ dans un NSDictionary?
- 13. Comment résoudre les fuites dans le code suivant? ObjectiveC
- 14. Darwin et ObjectiveC - Comment appeler des scripts shell à partir d'une application Cocoa?
- 15. Powershell: Utilisation pratique de $^et $$?
- 16. Utilisation de PHP et Xvfb
- 17. Utilisation de JLists et ListModels
- 18. Utilisation de php et MPI
- 19. Utilisation de threads et ProcessBuilder
- 20. Utilisation de fadein et ajout
- 21. Utilisation de FPDI et FPDF
- 22. Utilisation de DataGridViewComboBoxColumn et DataGridViewComboBoxCell
- 23. Utilisation de NSProxy et forwardInvocation:
- 24. Utilisation de ThreadPoolExecutor et AsyncTask
- 25. Utilisation de PrintWriter et OutputStream
- 26. Utilisation et interprétation de Sigaction
- 27. Utilisation de Kerberos et LDAP
- 28. Utilisation de PHP et SQLite
- 29. Utilisation de jqGrid avec ArrayData et utilisation des boutons d'ajout, de modification et de suppression
- 30. MSBee et son utilisation
Pouvez-vous donner plus de détails? Je ne suis pas sûr de ce que vous voulez dire par SEL et IMP. – drekka
Ouais, qu'est-ce que tu veux faire exactement? –