iPhone & iPad - tra cui una classe aumenterà binario?
-
23-09-2019 - |
Domanda
Ho una classe personalizzata che uso di frequente sui miei progetti. Questa classe ha diversi metodi, ma non tutti sono utilizzati in ogni progetto.
La mia domanda è:? Compresa questa classe su un progetto sarà gonfiare il progetto con codice di inutile o sarà il compilatore è sufficiente includere i metodi utilizzati
Voglio dire, se la mia classe ha 30 metodi, ma solo 4 vengono utilizzati in un determinato progetto sarà il compilatore includere anche l'altro non utilizzato 26 o solo il 4 utilizzati nel prodotto finale?
In caso comprende tutto, c'è un modo per forzarlo a ignorare i metodi utilizzati e tagliare il binario al minimo?
Soluzione
Il linker supporta dead-stripping , se si accende codice non utilizzato non dovrebbe causare qualsiasi gonfiare.
Il linker statico (ld) sostiene il rimozione di blocchi di codice e dati non utilizzati da file eseguibili. Questo processo (Conosciuta come dead-code strippaggio) aiuta ridurre la dimensione complessiva di eseguibili, che a sua volta migliora le prestazioni riducendo la memoria impronta del file eseguibile. E 'anche permette di collegare i programmi con successo quando il codice non utilizzato si riferisce ad un simbolo indefinito (invece di risulta in un errore di collegamento).
Dead-codice di strippaggio non si limita alla rimuovere solo funzioni inutilizzati e codice eseguibile da un binario. Il linker rimuove anche tutti i simboli inutilizzati e dati che risiedono in blocchi di dati. Tali simboli possono includere globale variabili, le variabili statiche, e dati stringa, tra gli altri.
Quando dead-codice di strippaggio è abilitata, il linker statica cerca il codice cioè irraggiungibile da un'iniziale insieme di simboli dal vivo e blocchi.
Altri suggerimenti
Se gli altri metodi hanno 26 codice @implementation
, allora sì, saranno utilizzati nel prodotto finale.
Il motivo è a causa del sistema di runtime. Anche se non è stato utilizzato che il 26 metodi in fase di compilazione, non c'è alcuna garanzia che non verranno indicati in fase di esecuzione (ricordate NSSelectorFromString
e -performSelector:
).
Non so se c'è un modo per forzare rimuovere questi codice. (-dead_strip
non funziona.)
Sembra che avete bisogno di refactoring e rinominare la grande classe di mamma grasso.
La mia domanda è: tra cui questa classe su un progetto gonfiare il progetto con il codice inutile o sarà il compilatore basta includono i metodi utilizzati?
Credo che si sta parlando inclusa l'intestazione e l'attuazione della vostra classe di supporto. Ciò consentirà di aumentare la dimensione del binario. Come sottolineato da jessecurry linker supporta strippaggio vicolo cieco. Questo è male come c'è sempre la possibilità che qualcuno vuole collegare con l'API pubblica del vostro binario (per fortuna questo non è il caso, come il collegamento dinamico non è consentito su iPhone, ma prendere in considerazione altre piattaforme). Ma scommetto che la differenza di dimensioni è troppo marginale per essere significativo.
La maggior impatto in termini di dimensioni è di solito le risorse che includere con l'applicazione (immagini, stringhe, ecc.).