2009-05-14 17 views
26

Soy nuevo en objective-c y me gustaría saber cuál es la mejor práctica para importar algunos encabezados externos que uso en mi clase.Objective-C: Importar encabezados en .ho .m?

¿Debo estar almacenando el #import "classB.h" en mi propio archivo .h de clases o en el archivo .m?

¿Cuál es la diferencia?

Gracias!

+0

Posible duplicado de [¿Pone #import s en archivos .h o .m?] (Http://stackoverflow.com/questions/2770243/do-you-put-import-s-in- h-or-m-files) –

Respuesta

34

Es una práctica adecuada para poner una declaración de clase hacia adelante (@class classB;) en la cabecera y en el #import "classB.h .m

Una declaración de la clase hacia adelante, como @class classB; permite el compilador sabe que debe esperar la clase más adelante, y no debería quejarse por el momento.

+0

Creo que te refieres a "en el .m" en tu primera oración. –

+0

Gracias por señalar eso. –

4

Para el compilador, realmente no importa. Puede simplemente lanzar declaraciones hacia adelante en su .h y luego esperar al #import hasta su archivo .m. Ver this publicar en SO para obtener más información sobre esto.

Desde un código abierto prospectivo, algunos pueden argumentar que colocar las importaciones en su archivo de implementación mantiene los detalles más cerca de donde se necesitan (vea ese enlace arriba también, las personas que hacen referencia a esta idea).

12

Para evitar referencias circulares, solo importará un archivo de encabezado en el archivo de encabezado de otra clase si hereda de esa clase. De lo contrario, use @class ClassName para declarar el tipo de clase si lo necesita en su archivo de encabezado, y #importelo en el archivo de implementación.

+7

Solo vale la pena mencionar que no puede obtener referencias circulares con la directiva # import. –

+0

@JasonCoco así que no tengo que preocuparme por #import en un archivo de encabezado como explica Marc aquí? – Johannes

2

Se recomienda que importe otros archivos de encabezado en su archivo de encabezado. De esta forma, puede usar la clase tanto en el encabezado como en los archivos de implementación (porque el archivo de implementación (.m) importa su archivo de encabezado asociado).

Si desea saber cuándo importar archivos y cuándo utilizar la declaración de clase de reenvío, puede ir al here. ;-)

Cuestiones relacionadas