Frage

Ich habe eine benutzerdefinierte Klasse I auf meine Projekte häufig verwenden. Diese Klasse verfügt über mehrere Methoden, aber nicht alle von ihnen sind in jedem Projekt verwendet.

Meine Frage ist: einschließlich dieser Klasse auf einem Projekt wird das Projekt mit nutzlosem Code aufblasen oder wird der Compiler enthält nur die Methoden

Ich meine, wenn meine Klasse 30 Verfahren hat aber nur 4 sind in einem bestimmten Projekt verwendet wird, wird der Compiler auch die anderen ungenutzten 26 oder nur die verwendeten 4 im Endprodukt?

Falls es alles umfasst, ist es eine Möglichkeit, es zu zwingen, die nicht verwendeten Methoden und schneiden Sie die binäre auf das Minimum zu mißachten?

War es hilfreich?

Lösung

Die Linker unterstützt dead-Stripping , wenn Sie es auf nicht verwendeten Code drehen sollte nicht Ursache jedes aufblasen.

Von der Apple-docs

  

Der statische Linker (ld) unterstützt die   Entfernen von nicht verwendeten Code und Datenblöcke   von ausführbaren Dateien. Dieser Prozess   (Bekannt als Dead-Code Stripping) hilft   reduziert die Gesamtgröße   ausführbare Dateien, die wiederum verbessert   Leistung durch den Speicher zu reduzieren   Fußabdruck der ausführbaren Datei. es ist auch   ermöglicht Programme erfolgreich zu verknüpfen   wenn nicht verwendeten Code bezieht sich auf ein   undefiniertes Symbol (statt resultierenden   in einem Verbindungsfehler).

     

Toter-Code Strippen ist nicht beschränkt auf   nur nicht verwendete Funktionen zu entfernen und   ausführbarer Code aus einem binären. Das   Linker entfernt auch alle nicht verwendeten Symbole   und Daten, die in Datenblöcke befinden.   Solche Symbole könnten gehören global   Variablen, statische Variablen und   String-Daten, unter anderem.

     

Wenn dead-Code Strippen aktiviert ist,   die statischen Linker sucht nach Code   das ist nicht erreichbar von einem Anfang   Satz von Live-Symbole und Blöcke.

Andere Tipps

Wenn die anderen 26 Methoden haben Code in @implementation, dann ja, werden sie im Endprodukt verwendet werden.

Der Grund ist wegen der Laufzeitsystem. Auch wenn Sie nicht, dass 26 Methoden in der Kompilierung verwendet haben, gibt es keine Garantie, dass sie nicht in der Laufzeit bezeichnet werden (denken Sie daran NSSelectorFromString und -performSelector:).

Ich weiß nicht, ob es einen Weg gibt, zu zwingen, diese Codes zu entfernen. (-dead_strip funktioniert nicht.)

Sounds wie Sie Refactoring benötigen und die große fette Mama Klasse umbenennen.

  

Meine Frage ist: einschließlich dieser Klasse   auf einem Projekt wird das Projekt aufblasen   mit nutzlosem Code oder der Compiler   nur sind die Methoden verwendet?

Ich glaube, Sie sprechen über den Header und die Umsetzung Ihrer Hilfsklasse einschließlich. Dadurch wird die binäre Größe erhöhen. Wie von jessecurry unterstützt der Linker Sackgassen Strippen. Das ist schlecht, da gibt es immer die Möglichkeit, jemanden zu Verbindung mit dem öffentlichen api Ihrer binären will (zum Glück dies nicht der Fall, da eine dynamische Verbindung ist nicht auf dem iPhone erlaubt, aber betrachten andere Plattformen). Aber ich wette, der Unterschied in der Größe Art und Weise zu marginal ist von Bedeutung zu sein.

Die meisten Auswirkungen in Bezug auf Größe sind in der Regel die Ressourcen, die Sie mit Ihrer Anwendung enthalten (Bilder, Strings usw.).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top