@class
existe para romper las dependencias circulares. Digamos que tienes clases A y B.
@interface A:NSObject
- (B*)calculateMyBNess;
@end
@interface B:NSObject
- (A*)calculateMyANess;
@end
Pollo; conoce a Egg. Esto nunca se puede compilar porque la interfaz de A depende de la definición de B y viceversa.
Por lo tanto, se puede solucionar usando @class
:
@class B;
@interface A:NSObject
- (B*)calculateMyBNess;
@end
@interface B:NSObject
- (A*)calculateMyANess;
@end
@class
le dice efectivamente al compilador que tal clase existe en algún lugar y, por lo tanto, los punteros declarados para apuntar a instancias de dicha clase son perfectamente válidos. Sin embargo, no podría llamar a un método en una referencia de instancia cuyo tipo solo se define como un @class
porque no hay metadatos adicionales disponibles para el compilador (no recuerdo si revierte el sitio de la llamada para que se evalúe como una llamada a través de id
o no).
En su ejemplo, el @class
es inofensivo, pero completamente innecesario.