@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.
id
evaluación.@class
ingresan su archivo .h y luego importan los archivos de encabezado necesarios en su archivo .m, y otros pueden simplemente importar el archivo .h en el archivo de encabezado de clases actual? Solo curiosidad, gracias. @bbum