2012-06-06 7 views
9

Sono un principiante della programmazione Objective-C/iOS.In Objective-C, l'importazione delle stesse intestazioni in ogni classe rende più a lungo la compilazione?

Voglio creare un file di intestazione che include tutte le intestazioni di classe che utilizzo nel mio progetto.
E importa l'intestazione in ogni file di intestazione di classe.

Ti piace questa domanda:
Including multiple classes in the same header file

Ma questa volta approccio aumento di compilazione?
Oppure ci sono altri svantaggi?

Ti prego, dimmi i buoni modi per importare le intestazioni.

risposta

23

In generale, progetti iOS appena generati offrono questa funzionalità, che si chiama un'intestazione precompilata o prefisso intestazione, ed è un file che presenta l'estensione .pch.

Puoi lanciare tutte le intestazioni che desideri lì e Xcode lo precompila prima di costruire qualcos'altro, e usarlo per compilare le altre unità di compilazione nel tuo progetto (ad esempio i file .m).

L'utilizzo di un'intestazione precompilata può o non può aumentare il tempo di compilazione; in generale, riduce il tempo di compilazione, a patto di avere molte intestazioni comuni e/o molti file sorgente.

Tuttavia, non è necessariamente una buona pratica trattare l'intestazione precompilata come una grande discarica, poiché le unità di compilazione possono formare dipendenze implicite su tutti i tipi di cose quando si desidera imporre un accoppiamento libero tra i componenti.

+0

grazie! '.pch' sembra utile. e grazie per aver sottolineato lo svantaggio di inserire tutte le intestazioni di classe che utilizzo nel mio progetto. mi arrenderò per farlo. –

+1

L'intestazione del prefisso non è disponibile nella versione recente di XCode (7.2) –

0

Inserire tutte le intestazioni in un file può migliorare le prestazioni di costruzione in alcuni casi, ma probabilmente non noterete la differenza.

È meglio mantenere le intestazioni di classe in file diversi a fini di organizzazione. Inoltre, se si includono solo le intestazioni necessarie nei file di origine, il tempo di costruzione verrà ridotto, anche se di nuovo non in modo evidente se si utilizza una macchina di compilazione decente.

6

È possibile importare il file di intestazione nel file prefix_pch dei progetti. Quindi è possibile utilizzarlo nelle classi.

6

Il problema con tutte le classi in un'intestazione è che ogni volta che si modifica un'intestazione di classe, tutti i file inclusi anche indirettamente devono essere ricompilati, mentre se si importa solo la classe necessaria e si usa @class quando puoi quindi solo ricompilare solo i file che utilizzano direttamente la classe. Quindi nel primo caso ci saranno molte più compilazioni che nel secondo. Questo è il modo in cui consiglierei di iniziare.

Tuttavia, quando il codice diventa più stabile e le classi NON cambiano, inserirle tutte in un'intestazione può migliorare il tempo di compilazione in quanto l'intestazione precompilata conterrà le stesse informazioni per ogni file. Quello che vorrei fare è quando il codice non sta cambiando così tanto da mettere le classi mature in un Framework e l'intestazione Framework includerà tutte queste classi.

+1

. Generalmente inserisco solo le intestazioni del framework SDK nei file '.pch' e occasionalmente nell'intestazione della libreria di terze parti. –

4

Se si desidera che le intestazioni vengano importate globalmente, è necessario farlo nel file YourProject-Prefix.pch. Dovrebbe assomigliare a qualcosa di simile a questo..

#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 

Ora, tutte le classi hanno YourGlobalHeader.h automagically importato.

Problemi correlati