2010-05-02 10 views

Antwort

11

"Import" verknüpft die Header-Datei, die es enthält. Alles in der Kopfzeile, einschließlich Eigenschaftsdefinitionen, Methodendeklarationen und jegliche Importe in der Kopfzeile werden verfügbar gemacht. Import stellt dem Linker die eigentlichen Definitionen zur Verfügung.

@klasse dagegen sagt nur der Linker nicht zu beschweren es hat keine Definition für eine Klasse. Es ist ein "Vertrag", den Sie an einem anderen Punkt für die Klasse definieren.

Am häufigsten verwenden Sie @class, um einen zirkulären Import zu verhindern, d. H. ClassA verweist auf ClassB und importiert ClassB.h in seine eigene ClassA.h. ClassB verweist jedoch auch auf ClassA, sodass ClassA.h in ClassB.h importiert wird. Da die Importanweisung die Importe eines Headers importiert, bewirkt dies, dass der Linker eine Endlosschleife eingibt.

Das Verschieben des Imports in die Implementierungsdatei (ClassA.m) verhindert dies, aber der Linker erkennt ClassB nicht, wenn er in ClassA.h auftritt. Die @class ClassB;-Direktive teilt dem Linker mit, dass Sie den Header für ClassB später bereitstellen werden, bevor es tatsächlich in Code verwandt wird.

+0

Sehr gute Erklärung. Vielen Dank! – sashaeve

Verwandte Themen