A menos que me falta algo, parece arbitrario en qué archivo .h pongo la definición del protocolo. Incluso me pregunto si podría estar en su propio archivo .h ... (en Java, está en su propio archivo)objetivo-c protocolo definido en su propio archivo .h?
Respuesta
Creo que mientras esté definido en algún lugar e incluido en uno de los archivos que está compilando, está definido. No hay convenciones como "ClassName.java" en Objective-C como en Java.
Esto es muy útil cuando desea hacer cosas como categories para cosas como métodos/propiedades privadas.
En Objective-C es lo mismo. Porque un protocolo es una lista de métodos que se comparte entre las clases. El protocolo es solo la lista de los métodos sin implementaciones correspondientes. Están destinados a ser implementados por otra persona.
Los protocolos generalmente se definen en su propio archivo .h (en mi experiencia). Pero se pueden definir en un archivo shared.h. Sería difícil permitir a los usuarios del protocolo adoptar el protocolo en una disposición de archivos compartidos y, además, saturaría su API. La documentación y el uso probablemente serían más sencillos si el protocolo está en su propio archivo .h.
Además, hacer uso de su protocolo para cosas como implementaciones polimórficas tendría menos sobrecarga si solo necesitara incluir el protocolo .h en lugar de un archivo .h que tenga otras declaraciones de clase. No estoy seguro de la relación costo/ahorro exacto de esta idea, pero he leído que habría algunos (más pequeño binario?)
Saludos, Frank
Creo que la colocación del protocolo depende cómo lo estás usando. Gran parte del tiempo, se usa un protocolo para definir la funcionalidad de un delegado o fuente de datos para otra clase. Si ese es el caso, creo que puede poner la definición del protocolo en la parte superior de la otra clase, ya que están destinados a ser utilizados juntos.
Si está definiendo un protocolo en lugar de una clase base compartida, probablemente debería ponerlo en un archivo separado. Por ejemplo, tengo varias clases diferentes que implementan el protocolo de "Operación". Algunas de mis otras funciones esperan recibir un objeto implementando el protocolo y no se preocupan demasiado por las clases reales. En ese caso, tiene sentido poner la definición del protocolo en su propio archivo de encabezado para que pueda incluirlo por sí mismo.
Benny tiene razón, aunque técnicamente será definido sin importar dónde lo coloque (siempre que esté incluido en algún lugar antes de su uso).
Es realmente una cuestión de estilo en Objective-C. Supongo que la forma realmente "correcta" es crear un archivo .h separado para el protocolo, y si estuviera haciendo un protocolo que no perteneciera a nada más (como NSCoding por ejemplo) eso es exactamente lo que haría. Por otro lado, la mayor parte del tiempo cuando creo un protocolo (o un protocolo informal, usando una categoría en NSObject) está vinculado a otra clase, como el protocolo informal de fuente de datos de NSTableView. En estas situaciones, simplemente pongo la declaración en el archivo de encabezado de esa clase por simplicidad.
También vea el Communicating with Objects de Apple, que trata sobre delegados, protocolos y selectores. Aunque aparece en Mac OS X, la mayoría (si no todos) parece aplicarse también a iOS.
- 1. compilando su propio glibc
- 2. Descriptor de archivo duplicado con su propio desplazamiento de archivo
- 3. ¿Las enumeraciones en C# tienen su propio archivo?
- 4. ¿Debo crear cada clase en su propio archivo .py?
- 5. implementar su propio sizeof
- 6. Creando su propio idioma
- 7. ¿Cómo se crea su propio moniker (Protocolo URL) en sistemas Windows?
- 8. objetivoC/CMTime - convierte AVPlayer.duration en milisegundos
- 9. .NET 3.5 DLL utilizando su propio archivo de configuración
- 10. ¿Puede un módulo tener su propio archivo de configuración?
- 11. ¿Cómo se escribe su propio protocolo IP? (Suponiendo que TCP y UDP no son adecuados)
- 12. Spring Bean ejecutándose en su propio hilo
- 13. -su-propio-escribe la consistencia en MongoDB
- 14. ¿Cómo proporcionar su propio LocationProvider en Android?
- 15. .h archivo no encontrado
- 16. Puede eclipsar extraer una segunda clase en el archivo de clase en su propio archivo
- 17. Este objetivo puede incluir su propio producto
- 18. programa Clojure leyendo su propio MANIFEST.MF
- 19. JAR ejecutable ignora su propio atributo Class-Path
- 20. Consejos sobre el diseño/implementación de un protocolo propio
- 21. ¿Cómo empiezo a escribir mi propio Protocolo IP-Like?
- 22. ¿Cómo implementar su propio servidor WHOIS?
- 23. Eclipse añadir su propio comando de generación
- 24. Creando su propio uid de estilo Tinyurl
- 25. ¿Cómo aloja su propio depósito de huevos?
- 26. ¿Cómo configurar su propio canal PEAR?
- 27. Escriba su propio administrador de memoria
- 28. Cómo escribir su propio .net obfuscator
- 29. ¿Cómo hacer su propio símbolo matemático laTex?
- 30. escribir mi propio mapa su funcionamiento genérico
estaba trabajando en la revisión de código donde encontré un protocolo reescrito en número de clases, creo un archivo separado para definir el protocolo, pero perdí la importación de ese archivo. su respuesta "(siempre y cuando esté incluida en algún lugar antes de su uso)". gracias + – Alok