Estoy viendo el video del curso Desarrollos de la aplicación para iPad y iPhone de la Universidad de Stanford. El instructor dice en el video que podemos controlar y arrastrar un objeto UI a los archivos de implementación para crear una acción. Pero de esta forma, el método no se declarará en el archivo de encabezado. ¿Esto significa que está bien implementar métodos en el archivo .m pero no declarar en el archivo .h?¿No podemos declarar métodos en los archivos de encabezado?
Respuesta
depende de cómo se defina "ok" :-)
Objective-C utiliza método dinámico búsqueda y realmente no exige el acceso ("privado", "público", etc.). Entonces no necesita para declarar cualquier método en un archivo de encabezado.
Sin embargo, terminará luchando contra el compilador, ya que hace una buena cantidad de comprobación de tipos a menos que convenza de que no, y perderá al hacerlo.
No es necesario que declare en el archivo de encabezado todos los métodos en la implementación. Pero si no está en el archivo de encabezado obviamente no puede hacer referencia a ellos por nombre literal en otro archivo, ni puede "reenviarlos" en el archivo de implementación.
(Tenga en cuenta que esto no es tan diferente de C regular, pero es diferente de los métodos de una clase en C++.)
Se trata de "OK" para no declarar métodos en la cabecera sí, bajo ciertas circunstancias. Por ejemplo, si usa ARC, el compilador generalmente necesita conocer la firma del método para que pueda hacer lo correcto. Pero básicamente, todo lo que significa es que, donde sea que estés usando el método, ya debe saber sobre el método que estás llamando.
Como está hablando de Interface Builder, es un poco diferente ya que conocerá todos los métodos ya que puede "ver" todo el contexto de su encabezado y los archivos de implementación y saber que existe un método. es decir, en mi terminología anterior, el método se ha definido antes de su uso.
Con respecto a la definición antes de su uso, el enfoque aceptado general es ya sea:
definir un método en el archivo de interfaz (.h). ej .:
MyClass.h
@interface MyClass : NSObject - (void)someMethod; @end
MyClass.m
@implementation MyClass - (void)someMethod { // do something } @end
definir un método en una categoría continuación clase. por ejemplo:
MyClass.h
@interface MyClass : NSObject @end
MyClass.m
@interface MyClass() - (void)someMethod; @end @implementation MyClass - (void)someMethod { // do something } @end
- 1. ¿Cómo clasifico automáticamente los métodos por encabezado?
- 2. Archivos de encabezado no encontrados
- 3. ¿Podemos declarar variables en el archivo app.config
- 4. ¿Son inútiles los archivos .lib sin los archivos de encabezado?
- 5. ¿Debo declarar estos métodos const?
- 6. ¿Por qué no puedo declarar métodos estáticos en una interfaz?
- 7. Ventajas/desventajas de los archivos de encabezado
- 8. ¿por qué los archivos de encabezado STL no tienen extensión?
- 9. Declarar objetos de clase en un archivo de encabezado
- 10. Dos formas de declarar métodos en Javascript
- 11. dependencia cíclica entre los archivos de encabezado
- 12. xCode/declarar métodos estáticos en la clase
- 13. Evitar declarar funciones privadas en archivos de encabezado de clase (C++)
- 14. ¿Por qué no podemos usar assertion para métodos públicos?
- 15. C#: ¿Por qué no podemos tener métodos internos/funciones locales?
- 16. ¿Podemos declarar la variable global en el archivo QML?
- 17. Declarar vectores en un archivo de encabezado de C++
- 18. ¿Cómo funcionan los archivos de encabezado y fuente en C?
- 19. Objetivo-C: ¿Debo declarar métodos privados?
- 20. declarando funciones globales estáticas en archivos de encabezado
- 21. ¿Por qué no podemos declarar alias de espacio de nombres dentro de una clase?
- 22. Forma preferida de declarar métodos en una clase
- 23. ¿Dónde AC-CHECK_HEADERS de autoconf verifica los archivos de encabezado?
- 24. Una comprensión básica de los archivos de encabezado de C++
- 25. Tratando con los archivos de encabezado de Boost
- 26. ¿Cómo declarar variables de instancia y métodos no visibles o utilizables fuera de la instancia de clase?
- 27. Encabezados precompilados en archivos de encabezado
- 28. ¿por qué no podemos declarar el objeto de una clase dentro de la misma clase?
- 29. Cómo declarar extern 2d-array en el encabezado?
- 30. ¿Dónde busca Visual Studio los archivos de encabezado C++?
El comportamiento del compilador parece haber cambiado un poco en Xcode 4.5. Tengo un montón de métodos que no declare en .h y no tengo errores de compilación. Sin embargo, cuando tomo este código en Xcode 4.2 para verificar la compatibilidad con iOS 4.3, el compilador arroja errores. – JScarry
@JScarry - He observado un comportamiento similar, aunque parece variar con algún tipo de indicador del compilador. Pero Xcode 4.5 está presionando el uso de una versión '()' de '@ interface' en .m, y puede pegar allí todas las declaraciones internas. –