Der Compiler wird sich nur beschweren, wenn Sie die Klasse so verwenden, dass der Compiler ihre Implementierung kennen muss.
Ex:
- Dies könnte z. B. der Fall sein, wenn Sie Ihre Klasse davon ableiten wollen oder
- Wenn Sie ein Objekt dieser Klasse als Mitgliedsvariable haben werden (was allerdings selten vorkommt).
Es wird sich nicht beschweren, wenn Sie es nur als Zeiger verwenden. Natürlich müssen Sie es in der Implementierungsdatei #importieren (wenn Sie ein Objekt dieser Klasse instanziieren), da es den Klasseninhalt kennen muss, um ein Objekt zu instanziieren.
HINWEIS: #import ist nicht dasselbe wie #include. Das bedeutet, dass es nichts gibt, was als zirkulärer Import bezeichnet wird. import ist eine Art Aufforderung an den Compiler, in einer bestimmten Datei nach bestimmten Informationen zu suchen. Wenn diese Informationen bereits vorhanden sind, ignoriert der Compiler sie.
Versuchen Sie es einfach, importieren Sie A.h in B.h und B.h in A.h. Es wird keine Probleme oder Beschwerden geben und es wird auch gut funktionieren.
Wann ist @class zu verwenden?
Sie verwenden @class nur, wenn Sie gar keine Kopfzeile in Ihre Kopfzeile importieren wollen. Dies könnte ein Fall sein, in dem Sie nicht einmal wissen wollen, was die Klasse sein wird. Fälle, in denen Sie vielleicht noch nicht einmal einen Header für diese Klasse haben.
Ein Beispiel hierfür könnte sein, dass Sie zwei Bibliotheken schreiben. Eine Klasse, nennen wir sie A, existiert in einer Bibliothek. Diese Bibliothek enthält einen Header aus der zweiten Bibliothek. Dieser Header könnte einen Zeiger auf A haben, muss ihn aber nicht unbedingt verwenden. Wenn die Bibliothek 1 noch nicht verfügbar ist, wird die Bibliothek B nicht blockiert, wenn Sie @class verwenden. Wenn Sie jedoch A.h importieren wollen, wird der Fortschritt von Bibliothek 2 blockiert.