718 Stimmen

@class vs. #import

Nach meinem Verständnis sollte man eine Forward-Class-Deklaration für den Fall verwenden, dass ClassA einen ClassB-Header einschließen muss und ClassB einen ClassA-Header einschließen muss, um zirkuläre Einschlüsse zu vermeiden. Ich verstehe auch, dass eine #import ist eine einfache ifndef so dass ein Include nur einmal vorkommt.

Meine Frage lautet wie folgt: Wann verwendet man #import und wann verwendet man @class ? Manchmal, wenn ich eine @class Deklaration sehe ich eine allgemeine Compiler-Warnung wie die folgende:

warning: receiver 'FooController' is a forward class and corresponding @interface may not exist.

Ich würde das wirklich gerne verstehen, im Gegensatz zum einfachen Entfernen der @class Vorwärts-Erklärung und das Auslösen einer #import ein, um die Warnungen des Compilers zum Schweigen zu bringen.

0voto

Brandon M Punkte 317

Stellen Sie sich @class so vor, dass Sie dem Compiler sagen: "Vertrau mir, das existiert".

Stellen Sie sich #import als copy-paste vor.

Es gibt mehrere Gründe, warum Sie die Anzahl der Importe so gering wie möglich halten wollen. Der erste Grund, der einem sofort einfällt, ist die Verkürzung der Kompilierzeit.

Beachten Sie, dass Sie beim Erben von einer Klasse nicht einfach eine Forward-Deklaration verwenden können. Sie müssen die Datei importieren, damit die Klasse, die Sie deklarieren, weiß, wie sie definiert ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X