Otra pregunta mía sobre optimizing Objective C programs inspiró lo siguiente: ¿Alguien tiene un pequeño ejemplo usando SEL e IMP cuando el Método tiene dos (o más) enteros para la entrada?Objective-C y uso de SEL/IMP
Respuesta
Aquí hay un good tutorial para obtener el IMP actual (con una descripción general de los IMP). Un ejemplo muy básico de PIM y SELs es:
- (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) = ...
A continuación, podría invocar el IMP, así:
theImplementation(self, theSelector, 3, 5);
Por lo general hay ninguna razón para necesitar PIM menos que esté haciendo vudú serio - se Hay algo específico que quieras hacer?
@eman: necesita convertir ese retorno así: void (* theImplementation) (id, SEL, int, int) = (void (*) (id, SEL, int, int)) [self methodForSelector: theSelector]; –
@Jason Coco: corrígeme si me equivoco, pero creo que IMP está tipeado como (id, SEL, ...), por lo que no debería importar (aunque no es seguro, pero si necesitas seguridad tipográfica, probablemente no deberías estar usando IMP). – shosti
Tiene razón, ya que este método está vacío, está bien, pero obtendrá errores en muchas otras instancias. Tu/necesitar/lanzar fue probablemente demasiado fuerte, tu/siempre deberías lanzar/es probablemente más correcto;) - pero dada esta pregunta, creo que el OP probablemente/no debería/estaría usando IMP tampoco. –
Ahora que tengo este trabajo gracias a eman, puedo añadir otro ejemplo:
SEL [email protected](getRankOf:::::::);
IMP rankingMethod=[eval methodForSelector:cardSelector];
rankingMethod(eval, cardSelector, 0, 1, 2, 3, 4, 5, 6);
no necesito esto para nada útil, ¡Solo necesitaba satisfacer mi curiosidad! Gracias de nuevo.
Otro buen enlace para optimizar Objective-C es http://www.mulle-kybernetik.com/artikel/Optimization/opti-3-imp-deluxe.html – SK9
Aquí hay otra posible alternativa. Esto evita el bloqueo, pero el corte no funciona.
- (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. Pros y contras del uso de excepción en IOS/ObjectiveC
- 2. Uso de librerías estáticas C/C++ desde iPhone Aplicaciones ObjectiveC
- 3. Ayuda con código GCC y ObjectiveC y Cygwin
- 4. objectivec: fb publicar comentario error
- 5. Bloques ObjectiveC equivalente en Java
- 6. ObjectiveC Parse Integer from String
- 7. Diferencia entre NSLog y sentencia printf para ObjectiveC
- 8. ObjectiveC que pasa alrededor ... nula terminado listas de argumentos
- 9. ObjectiveC: ¿dónde declarar las propiedades de instancias privadas?
- 10. Cómo dividir la nueva línea de NSString en ObjectiveC
- 11. Crear una burbuja/círculo de color programáticamente en ObjectiveC y Cocoa
- 12. ¿Cómo implementar un puente sin cargo en ObjectiveC/C?
- 13. obteniendo el error "invalid_client" en la muestra gdata-objectivec-client
- 14. ¿Puedo colocar un ObjectiveC @selector en un NSDictionary?
- 15. enviar una notificación desde javascript en UIWebView a ObjectiveC
- 16. Uso de protocolos de Objective C
- 17. Explicación y uso de JSONP
- 18. Uso de fadein y anexar
- 19. Uso de tryCatch y fuente
- 20. captadores y definidores de uso
- 21. El uso de "..." y 'reproducir'
- 22. Uso de ObjectContext y DbContext
- 23. Uso de mahout y hadoop
- 24. Uso de FileNameFilter y FileFilter
- 25. Uso de látex y Vim
- 26. Acceso y uso de MobileWiFi.framework
- 27. Uso de HTTPS y httpWebRequest
- 28. Uso de ReferenceQueue y WeakReference
- 29. Uso de PHP y Xvfb
- 30. Creación de parámetros de consulta URL desde objetos NSDictionary en ObjectiveC
¿Puede dar más detalles? No estoy seguro de lo que quieres decir con SEL e IMP. – drekka
Sí, ¿qué quieres hacer exactamente? –