2009-06-05 6 views

Respuesta

3

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.

-1

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.

3

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

19

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).

+0

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

0

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.

0

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.

Cuestiones relacionadas