Für modernes iOS und OS X sollten Benutzer Module verwenden . Dies ist standardmäßig für neue Projekte aktiviert, und der Import / Einschluss erfolgt mithilfe von @import
.
Mit Modulen kann der Compiler eine Zwischendarstellung des Inhalts eines Moduls erstellen (z. B. die Header eines Frameworks). Ähnlich wie bei einem PCH kann diese Zwischendarstellung von mehreren Übersetzungen gemeinsam genutzt werden. Module gehen jedoch noch einen Schritt weiter, da ein Modul nicht unbedingt zielspezifisch ist und ihre Deklarationen nicht lokalisiert werden müssen (zu a *.pch
). Diese Darstellung kann Ihnen eine Menge redundanter Compilerarbeit ersparen.
Wenn Sie Module verwenden, benötigen Sie keinen PCH, und Sie sollten sie wahrscheinlich ganz weglassen - zugunsten der Verwendung von @import
local für die Abhängigkeit. In diesem Fall erspart Ihnen ein PCH nur die Eingabe lokaler Einschlüsse für Abhängigkeiten (welche IMO Sie sowieso ausführen sollten).
Wenn wir jetzt auf die ursprüngliche Frage zurückblicken: Sie sollten vermeiden, Ihren PCH mit allen möglichen zufälligen Dingen zu füllen. Makros, Konstanten #defines
und alle möglichen kleinen Bibliotheken. Im Allgemeinen sollten Sie weglassen, was für die meisten Ihrer Quelldateien wirklich unnötig ist . Wenn Sie alle möglichen Dinge in Ihren PCH aufnehmen, wird nur eine Menge Gewicht und Abhängigkeit hinzugefügt. Ich sehe, dass Leute alles, was sie verknüpfen, und mehr in den PCH stellen. In der Realität müssen Hilfsrahmen in den meisten Fällen nur für wenige Übersetzungen sichtbar sein. ZB "Hier ist unser StoreKit-Zeug - lasst uns StoreKit nur dort importieren, wo es musssei sichtbar. Insbesondere diese 3 Übersetzungen ". Dies hält Ihre Erstellungszeiten niedrig und hilft Ihnen, Ihre Abhängigkeiten im Auge zu behalten, sodass Sie Code leichter wiederverwenden können. In einem ObjC-Projekt würden Sie normalerweise bei Foundation anhalten. Wenn es viel gibt In der Benutzeroberfläche können Sie UIKit oder AppKit zu Ihrem PCH hinzufügen. Dies setzt voraus, dass Sie die Erstellungszeiten optimieren möchten. Eines der Probleme bei großen PCHs, die (fast) alles enthalten, besteht darin, dass das Entfernen unnötiger Abhängigkeiten sehr zeitaufwändig ist Wenn die Abhängigkeiten Ihres Projekts zunehmen und Ihre Erstellungszeiten steigen, müssen Sie sich wehren, indem Sie unnötige Abhängigkeiten beseitigen, um Ihre Erstellungszeiten zu verkürzen. Außerdem sollten alle Änderungen häufig aus Ihrem PCH herausgehalten werden. Eine Änderung erfordert eine vollständige Neuerstellung. Es gibt einige Optionen zum Freigeben von PCHs. Wenn Sie PCHs verwenden,
Was ich in meinen PCH geschrieben habe: Ich habe sie vor Jahren für die überwiegende Mehrheit der Ziele nicht mehr verwendet. Es gibt normalerweise nicht genug Gemeinsamkeiten, um sich zu qualifizieren. Denken Sie daran, ich schreibe C ++, ObjC, ObjC ++ und C - der Compiler gibt eine für jede Sprache in Ihrem Ziel aus. Ihre Aktivierung führte daher häufig zu langsameren Kompilierungszeiten und höheren E / A. Letztendlich ist eine zunehmende Abhängigkeit kein guter Weg, um die Abhängigkeit in komplexen Projekten zu bekämpfen. Bei der Arbeit mit mehreren Sprachen / Dialekten gibt es große Unterschiede in den Abhängigkeiten, die für ein bestimmtes Ziel erforderlich sind. Nein, ich würde nicht empfehlen, dass dies für jedes Projekt optimal ist, aber dies gibt dem Abhängigkeitsmanagement in größeren Projekten eine gewisse Perspektive.
Verweise
Anmerkungen
- Diese Frage wurde ursprünglich einige Jahre vor der Einführung von Modules gestellt.
- Derzeit (Xcode 5.0) funktionieren Module für C und ObjC, jedoch nicht für C ++.