iPhone & iPad - darunter eine Klasse erhöhen Binärdatei wird?
-
23-09-2019 - |
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?
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.).