Domanda

Questo può sembrare una domanda molto stupida, ma qual è il costo di inserire (in realtà, chiamando #import) un file di intestazione in Objective-C? Mi stanco di includere sempre le stesse intestazioni in varie località, così ho deciso di creare semplicemente un file GlobalReferences.h che include diverse intestazioni comunemente si fa riferimento.

C'è un costo apprezzabile per l'inclusione di riferimenti ad altri file, se non sono utilizzati nemmeno? Il mio istinto mi dice "no", come sembra che il linker è solo a conoscenza di altri file quando si usa #import, ma non ero sicuro se considerazioni speciali devono essere prese per lo sviluppo iPhone, che è quello che i miei progetti preoccupazioni. Ogni pensiero?

È stato utile?

Soluzione

Il linker non sa nulla di file #imported. Infatti, il compilatore Objective-C non sa nulla di loro neanche, sono pre-elaborati dal preprocessore. Il preprocessore inserisce in modo efficace i contenuti delle intestazioni nel punto che li hai incluso nel file di origine. L'attuale compilatore Objective-C dovrà poi elaborare prototipi di funzioni extra e definizioni di interfaccia di classe, anche se non vengono utilizzati. Anche se questo non è di solito un lavoro lungo, può aumentare i tempi di compilazione. La dimensione risultante e le prestazioni della vostra applicazione non devono essere pregiudicate.

Per vedere ciò che il codice sorgente grezzo assomiglia (inclusi tutti i file di intestazione e macro espanso, ecc):

gcc -E your-source-file.m

Altri suggerimenti

Importazione / tra cui più file di intestazione del necessario aumenteranno i tempi di compilazione. Si può alleviare alcuni di questo dolore con intestazioni precompilati .

Il più grande svantaggio sarà in tempi di compilazione. Se tutte le intestazioni sono importati in ogni file sorgente, quindi il intero di progetto dovrà essere ricostruito ogni volta che si apporta una modifica a un file di intestazione.

Ho avuto l'impressione che fosse scadente troppo di un colpo: http://en.wikipedia.org/wiki/Objective-C#.23import

  

qual è il costo di inserire (in realtà, chiamando # import) un file di intestazione in Objective-C?

Il compilatore potrebbe esaurirsi a leggere questi file inutilmente. Una volta #imported, sono necessari i file aggiuntivi da analizzare, compilato, ecc per ogni traduzione (file per esempio .m) è visibile in - rendere il vostro costruire e collegare i tempi molto più lunghi. 10 volte di più è non sorprendente.

  

mi stanco di includere sempre le stesse intestazioni in varie località, così ho deciso di creare semplicemente un file GlobalReferences.h che include diverse intestazioni comunemente si fa riferimento.

In genere, questo è un approccio molto male. Il problema comune è che ogni volta che uno qualsiasi dei file inclusi da GlobalReferences.h è cambiato, tutto il tuo progetto e tutto in-tra dipendenze avrebbe bisogno di essere ricostruito, ricollegati, ecc.

La mia preferenza è quella di separare i programmi in piccoli librerie o pacchetti in cui esiste questa interdipendenza (ad esempio StoreKit.framework è un piccolo pacchetto / biblioteca) - ma ripieno quelle biblioteche / quadri / pacchetti nelle intestazioni non risolve nulla. Inoltre, le dichiarazioni in avanti e la memorizzazione dei dati nella continuazione di classe o @implementation possono ridurre in modo significativo le dipendenze (perché è possibile localizzare l'inclusione di una biblioteca / colpo di testa solo le traduzioni necessarie).

Infine, la pulizia dopo pigro include richiede molto tempo, soprattutto quando ci sono molti e hai aspettato fino a tempi di compilazione del progetto sono terribilmente lento. In sostanza, si deve tornare indietro e scegliere a parte le dipendenze inutili, ricostruire, ripetere (per giorni).

  

C'è un costo apprezzabile per l'inclusione di riferimenti ad altri file, se non sono utilizzati dispari?

Assolutamente. Il più grande i vostri progetti si sviluppano, l'inclusione peggio pigro diventa. Alcuni pigro include in un grande progetto potrebbe aggiungere decine o centinaia di migliaia di linee per la maggior parte dei vostri file compilati, e può innescare frequente ricompilazione di molte fonti. Questo aggiunge una notevole quantità di complessità del processo di compilazione - richieste di CPU vanno verso l'alto, l'utilizzo della RAM va verso l'alto, IO disco va fino ... e ancora una volta, questo diventa un problema più grande come le vostre basi di codice / progetti aumentano in complessità

Vai avanti e farlo. A meno che le intestazioni che avete incluso sono enormi e non si sta usando le intestazioni precompilate, non si dovrebbe vedere alcuna differenza. Come altri hanno detto, #import è una direttiva del preprocessore. Questo non ha alcuna conseguenza runtime e in molti casi non significativo il tempo di compilazione conseguenza.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top