2012-06-06 6 views
9

Soy un principiante de la programación de Objective-C/iOS.En Objective-C, ¿importar los mismos encabezados en cada clase hace que el tiempo de compilación sea más largo?

Quiero hacer un archivo de un encabezado que incluya todos los encabezados de clase que uso en mi proyecto.
E importe el encabezado en cada archivo de encabezado de clase.

gusta esta pregunta:
Including multiple classes in the same header file

Pero este enfoque hace tiempo aumento de compilación?
¿O hay alguna otra desventaja?

Por favor, dígame las buenas maneras de importar encabezados.

Respuesta

23

En general, los proyectos de iOS recién generados vienen con esta funcionalidad, que se llama un encabezado precompilado o cabecera prefijo, y es un archivo que tiene la extensión .pch.

Puede lanzar todos los encabezados que desee y Xcode los compilará previamente antes de construir cualquier otra cosa, y usarlos para compilar las otras unidades de compilación en su proyecto (por ejemplo, archivos .m).

El uso de un encabezado precompilado puede aumentar o no el tiempo de compilación; en general, reduce el tiempo de compilación, siempre que tenga muchos encabezados comunes y/o muchos archivos fuente.

Sin embargo, no es necesariamente una buena práctica tratar el encabezado precompilado como un gran vertedero, ya que sus unidades de compilación pueden formar dependencias implícitas en todo tipo de cosas cuando desee aplicar un acoplamiento flexible entre los componentes.

+0

gracias! '.pch' parece útil. y gracias por señalar la desventaja de poner todos los encabezados de clase que uso en mi proyecto. Me rendiré para hacer eso. –

+1

El encabezado de prefijo no está disponible en XCode reciente (7.2) versión –

0

Poner todos los encabezados en un solo archivo puede mejorar el rendimiento de compilación en ciertos casos, pero probablemente no notarás la diferencia.

Es mejor mantener sus encabezados de clase en diferentes archivos para fines de organización. Además, si solo está incluyendo los encabezados que necesita en sus archivos fuente, entonces su tiempo de compilación se reducirá, aunque de nuevo no es notable si está usando una máquina de construcción decente.

6

Puede importar ese archivo de encabezado en su proyecto prefix_pch file.then Puede usarlo en Sus clases.

6

El problema con todas las clases en un encabezado es que cada vez que cambie un encabezado de clase, todos los archivos, incluso indirectamente, deberán recompilarse, mientras que si solo importa la clase necesaria y también usar @clase cuando entonces, solo puede volver a compilar los archivos que usan directamente la clase. Por lo tanto, en el primer caso habrá muchas más compilaciones que en el segundo. Esta es la forma en que recomendaría comenzar.

Sin embargo, cuando su código se vuelve más estable y las clases NO cambian, ponerlas todas en un encabezado puede mejorar el tiempo de compilación ya que el encabezado precompilado contendrá la misma información para cada archivo. Lo que haría es que cuando el código no cambia tanto se colocan las clases maduras en un Framework y el encabezado Framework incluirá todas estas clases.

+1

Gran punto. En general, solo pongo encabezados de marcos SDK en archivos '.pch' y el encabezado ocasional de la biblioteca de terceros. –

4

Si desea que los encabezados se importen globalmente, debe hacerlo en el archivo YourProject-Prefix.pch. Debería verse algo así ...

#import <Availability.h> 

#ifndef __IPHONE_4_0 
#warning "This project uses features only available in iOS SDK 4.0 and later." 
#endif 

    #ifdef __OBJC__ 
    #import <UIKit/UIKit.h> 
    #import <Foundation/Foundation.h> 
    #import "YourGlobalHeader.h" 
#endif 

Ahora, todas las clases han importado YourGlobalHeader.h automágicamente.

Cuestiones relacionadas