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?

È stato utile?

Soluzione

Il linker supporta dead-stripping , se si accende codice non utilizzato non dovrebbe causare qualsiasi gonfiare.

documentazione di Apple :

  

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.).

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