Question

J'ai une classe personnalisée J'utilise souvent sur mes projets. Cette classe a plusieurs méthodes, mais pas tous sont utilisés dans tous les projets.

Ma question est: y compris cette classe sur un projet sera le projet météorisation avec le code inutile ou sera le compilateur inclure uniquement les méthodes utilisées

Je veux dire, si ma classe dispose de 30 méthodes, mais seulement 4 sont utilisés dans un projet donné le compilateur comprend également l'autre utilisé 26 ou tout simplement le 4 utilisé dans le produit final?

Dans le cas où il comprend tout, est-il un moyen de le forcer à ne pas tenir compte des méthodes non utilisées et couper le binaire au minimum?

Était-ce utile?

La solution

L'éditeur de liens prend en charge mort décapage , si vous le mettez sur le code utilisé ne doit pas causer tout le ballonnement.

De la docs d'Apple :

  

Le segment de liaison statique (ld) prend en charge la   élimination des codes inutilisés et des blocs de données   à partir de fichiers exécutables. Ce processus   (Connu sous le nom de décapage mort code) aide   réduire la taille globale de   exécutables, qui à son tour améliore   les performances en réduisant la mémoire   l'empreinte de l'exécutable. Ça aussi   permet aux programmes de lien avec succès   lorsque le code utilisé se réfère à un   symbole non défini (au lieu de résultat   une erreur de liaison).

     

dénudage mort code ne se limite pas à   suppression uniquement des fonctions inutilisées et   un code exécutable à partir d'un binaire. le   éditeur de liens supprime également tous les symboles non utilisés   et les données qui se trouvent dans des blocs de données.   Ces symboles peuvent inclure mondiale   les variables, les variables statiques, et   les données de chaîne, entre autres.

     

Lors de décapage mort code est activé,   l'éditeur de liens statiques recherche pour le code   qui est inaccessible à partir d'une première   ensemble de symboles et de blocs en direct.

Autres conseils

Si les 26 autres méthodes ont code @implementation, alors oui, ils seront utilisés dans le produit final.

La raison en est du système d'exécution. Même si vous n'avez pas utilisé que 26 méthodes dans la compilation, il n'y a aucune garantie qu'ils ne seront pas mentionnés dans l'exécution (souvenez-vous NSSelectorFromString et -performSelector:).

Je ne sais pas s'il y a un moyen de forcer les supprimer du code. (-dead_strip ne fonctionne pas.)

On dirait que vous devez factoriser et renommer la grande classe de graisse mamma.

  

Ma question est: y compris cette classe   sur un projet sera le projet météorisation   avec le code inutile ou sera le compilateur   Il suffit d'inclure les méthodes utilisées?

Je pense que vous parlez, y compris l'en-tête et la mise en œuvre de votre classe d'aide. Cela augmentera la taille binaire. Comme l'a souligné l'éditeur de liens jessecurry supporte décapage impasse. Ceci est mauvais car il y a toujours la possibilité que quelqu'un veut faire le lien avec l'api publique de votre binaire (heureusement ce n'est pas le cas comme un lien dynamique n'est pas autorisée sur l'iPhone, mais envisager d'autres plates-formes). Mais je parie que la différence de taille est trop marginale pour être significative.

Le plus grand impact en termes de taille est généralement les ressources dont vous joindre à votre demande (images, cordes etc.).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top