qual è il costo di includere (in realtà, chiamando #import) un file di intestazione in Objective-C?
Il compilatore può esaurirsi per leggere questi file inutilmente. Una volta #import
ed, i file aggiuntivi dovranno essere analizzati, compilati, ecc. Per ogni traduzione (ad esempio il file .m
) in cui è visibile - rendendo i tempi di costruzione e collegamento molto più lunghi. 10 volte più lungo è non sorprendente.
Mi sono stancato di includere costantemente le stesse intestazioni in varie posizioni, quindi ho deciso di creare semplicemente un file GlobalReferences.h che includa diverse intestazioni di riferimento comune.
In genere, si tratta di un approccio molto negativo. Il problema comune è che ogni volta che uno qualsiasi dei file inclusi da GlobalReferences.h viene modificato, l'intero progetto e tutte le dipendenze intermedie devono essere ricostruite, ricollegate, ecc.
La mia preferenza è di separare i programmi in piccole librerie o pacchetti in cui esiste questa interdipendenza (ad esempio StoreKit.framework è un piccolo pacchetto/libreria), ma il riempimento di tali librerie/framework/pacchetti nelle intestazioni non risolve nulla. Inoltre, le dichiarazioni di inoltro e l'archiviazione dei dati nella continuazione della classe o @implementation
possono ridurre significativamente le dipendenze (poiché è possibile localizzare l'inclusione di una libreria/intestazione solo per le traduzioni necessarie).
Infine, ripulire dopo pigro include molto tempo, soprattutto quando ce ne sono molti e hai aspettato fino a quando i tempi di costruzione del tuo progetto sono insopportabilmente lenti. Fondamentalmente, devi tornare indietro e scegliere le dipendenze non necessarie, ricostruire, ripetere (per giorni).
C'è qualche costo apprezzabile per includere riferimenti ad altri file se non vengono nemmeno utilizzati?
Assolutamente. Più i tuoi progetti crescono, peggiore diventa l'inclusione pigra. Alcune persone pigre includono un grande progetto che potrebbe aggiungere decine o centinaia di migliaia di linee alla maggior parte dei tuoi file compilati e può innescare la frequente ricompilazione di molte fonti. Ciò aggiunge una notevole quantità di complessità al processo di compilazione: le richieste della CPU vanno al rialzo, l'utilizzo della RAM aumenta, l'I/O del disco aumenta ... e ancora, questo diventa un problema più grande man mano che i database/progetti aumentano di complessità.
Grazie per averlo chiarito. – LucasTizma