¿Object-c ofrece una forma de interceptar llamadas al método de clase que no existe?Objective C y métodos mágicos en la clase
Respuesta
Sí, se puede con la resolveClassMethod: método de clase (que se define en NSObject):
Aquí también es algo a tener en cuenta (me perplejo primera vez): http://iphonedevelopment.blogspot.com/2008/08/dynamically-adding-class-objects.html
El método forwardInvocation
es lo que va a querer usar. Se llama automáticamente cuando se invoca un selector inexistente en un objeto. El comportamiento predeterminado de este método es llamar al doesNotRecognizeSelector:
(que es lo que genera la información de depuración en su consola), pero puede anularlo para hacer lo que desee. Un enfoque recomendado por Apple es hacer que este método envíe la invocación del método a otro objeto.
- (void)forwardInvocation:(NSInvocation *)anInvocation
Tenga en cuenta que forwardInvocation
es una operación bastante costosa. Un objeto NSInvocation necesita ser creado por el framework y (opcionalmente) usado para invocar un selector en otra instancia. Si está buscando un método (relativamente) más rápido para detectar selectores que no existen, puede optar por implementar forwardingTargetForSelector
.
- (id)forwardingTargetForSelector:(SEL)aSelector
Usted debe Apple's documentation de cómo reemplazar estos métodos efectivamente, hay algunas pifias a tener en cuenta, sobre todo cuando reemplazando el método forwardInvocation
en el mismo objeto que tendrá los selectores que faltan.
- 1. PHPStorm y métodos mágicos
- 2. PHP métodos mágicos ejemplo
- 3. diferencia entre + y - métodos en Objective-C
- 4. En Objective-C, ¿cuándo debería usar métodos de clase y cuándo debería usar métodos de instancia?
- 5. Notación de puntos en Objective-C con métodos de clase?
- 6. Métodos protegidos en Objective-C
- 7. Cómo usar interfaces y métodos mágicos en PHP
- 8. C# eventos y métodos de la clase
- 9. ¿Cómo llamo a los métodos de + clase en Objective C sin hacer referencia a la clase?
- 10. PHP - ¿Quieres decir evitar los métodos mágicos?
- 11. Objective-C - ¿Patrón de métodos de plantilla?
- 12. Métodos estáticos sin estado vs. funciones C en Objective-C
- 13. "clase estática en Objective C"
- 14. Propósito de Métodos de instancia vs. Métodos de clase en Objective-C
- 15. ¿Por qué Python usa 'métodos mágicos'?
- 16. "Métodos de extensión" en Objective-C
- 17. Cómo detectar métodos no utilizados y #import en Objective-C
- 18. Cómo escribir métodos lambda en Objective-C?
- 19. ¿Cómo inspecciono una clase en Objective-C?
- 20. La mejor manera de definir métodos privados para una clase en Objective-C
- 21. ¿Forma recomendada de usar la clase C++ en la clase Objective-C minimizando el uso de Objective-C++?
- 22. Prefijo de clase Objective-C
- 23. Convenio Objective-C para métodos reemplazados
- 24. Agregar Objeto C++ a Objective-Clase C
- 25. Parámetro de clase específico en Objective-C
- 26. variables estáticas en los métodos de Objective-C
- 27. ¿Puedo aplicar métodos de clase estática en línea en Objective-C?
- 28. Objective-C: Creación de Instancia de la clase de referencia
- 29. Objective-C y UML de modelado
- 30. ¿Cómo cargar dinámicamente la clase en Objective-C?
El mecanismo de reenvío del método de clase requiere métodos de clase, no métodos de instancia. '+ (void) forwardingTargetForSelector: (SEL) sel;' '+ (void) forwardInvocation: (NSInvocation *) anInvocation;' La función más adelante utiliza una función de soporte: '+ (NSMethodSignature *) methodSignatureForSelector: (SEL) sel; ' – dmitri