@classexistiert, um zirkuläre Abhängigkeiten zu brechen. Angenommen, Sie haben die Klassen A und B.
@interface A:NSObject
- (B*)calculateMyBNess;
@end
@interface B:NSObject
- (A*)calculateMyANess;
@end
Hähnchen; Ei treffen. Dies kann niemals kompiliert werden, da die Schnittstelle von A davon abhängt, dass B definiert ist und umgekehrt.
Somit kann es behoben werden mit @class:
@class B;
@interface A:NSObject
- (B*)calculateMyBNess;
@end
@interface B:NSObject
- (A*)calculateMyANess;
@end
@classteilt dem Compiler effektiv mit, dass eine solche Klasse irgendwo existiert, und daher sind Zeiger, die deklariert wurden, um auf Instanzen dieser Klasse zu verweisen, vollkommen gültig. Sie konnten jedoch keine Methode für eine Instanzreferenz aufrufen, deren Typ nur als definiert ist, da @classdem Compiler keine zusätzlichen Metadaten zur Verfügung stehen (ich kann mich nicht erinnern, ob die Aufrufsite wieder als Aufruf durch idoder ausgewertet wird nicht).
In Ihrem Beispiel ist das @classharmlos, aber völlig unnötig.