Tengo una clase que usa resolveInstanceMethod
para implementar métodos dinámicamente. Cuando llamo a los métodos implementados dinámicamente desde otras partes del código, el compilador emite una advertencia de que el objeto puede no responder al selector. Me gustaría que el compilador no emita tales advertencias para esta clase, pero no quiero suprimir las advertencias cuando invoco un selector no válido en otras clases. es posible?¿Cómo puedo decirle al compilador que mi clase resuelve los métodos dinámicamente?
Respuesta
asumiendo que conoce las firmas de los métodos que se van a resolver de forma dinámica en tiempo de compilación, se puede declarar 'em en una categoría informal:
@interface MyDynamicallyResolvingClass(MethodsThatWillResolveAtRuntime)
... declare the methods here ...
@end
No hay necesidad de proporcionar una implementación.
Si no conoce las firmas, si los nombres de los métodos también son dinámicos, necesitará usar -performSelector:
(o las variantes de argumento de objeto simple o doble) o es probable que desee utilizar NSInvocación, a menos que el rendimiento sea una preocupación importante (si es así, hay soluciones alternativas que son significativamente más complicadas).
Uso performSelector:
Es equivalente a enviar un mensaje directamente al receptor, sin embargo, que le permite enviar mensajes que no están determinados, hasta el tiempo de ejecución.
Si sus métodos toman uno o dos argumentos, puede utilizar las hermanas de este método: – performSelector:withObject:
y – performSelector:withObject:withObject:
Si sus métodos tienen más de dos argumentos, o argumentos que no son del tipo de objeto, esta respuesta es no adaptado
- 1. ¿Cómo puedo decirle al compilador que ignore un método en los rastros de pila?
- 2. ¿Cómo puedo decirle al compilador que no cree un objeto temporal?
- 3. Compilación de Java: ¿hay alguna manera de decirle al compilador que ignore partes de mi código?
- 4. Cómo agregar métodos dinámicamente
- 5. Cómo puedo decirle a AngularJS que "actualice"
- 6. ¿Cómo puedo redefinir los métodos de clase Perl?
- 7. ¿Cómo puedo decirle a ProGuard que mantenga mi función que se usa para onClick?
- 8. ¿Puedo decirle al CLR que clasifique los objetos inmutables entre los AppDomains por referencia?
- 9. ¿cómo resuelve mi navegador web los nombres de dominio?
- 10. ¿Cómo puedo decirle a la clase heredada que no llame al constructor sin parámetros de su clase base?
- 11. Cómo llamar dinámicamente a los métodos de acceso en Ruby
- 12. Compilador MonoTouch AOT: los métodos grandes fallan
- 13. ¿Cómo puedo ejecutar mi código al cargar la clase?
- 14. ¿Cómo puedo decirle a Gradle que use mi archivo testng.xml para Clases de prueba y pedidos?
- 15. ¿Cómo establecer los nombres de clase dinámicamente?
- 16. ¿Puedo decirle al compilador Closure que, solo para tipos específicos, deje de cambiar el nombre de las propiedades?
- 17. Redefina los métodos de clase o clase
- 18. puedo tener RSpec sin una clase para los métodos
- 19. ¿Cómo puedo ocultar los métodos en F #?
- 20. ¿Cómo puedo decirle a mi aplicación Cocoa que cierre desde la propia aplicación?
- 21. ¿Cómo puedo decirle a poedit que ignore los errores de texto que no son ASCII?
- 22. ¿Cómo puedo estar seguro de que el compilador no optimiza mi prueba de rendimiento?
- 23. ¿Cómo decirle al depurador de LLDB que no maneje SIGBUS?
- 24. Haciendo que la clase se ajuste al protocolo con categoría para los métodos existentes
- 25. ¿Cómo resuelve Unity los tipos que no se han registrado?
- 26. Ruby - ¿Cómo redefinir los métodos de clase?
- 27. ¿Cómo puedo hacer que mi clase de destino DebuggerTypeProxy herede los proxies base?
- 28. Agregando código al principio/final de los métodos en tiempo de ejecución dinámicamente
- 29. cómo decirle a gradle que descargue todos los archivos fuente
- 30. métodos añadiendo dinámicamente
Un protocolo informal resuelve mi problema perfectamente. –