@class
existe para romper las dependencias circulares. Supongamos que tiene las clases A y B.
@interface A:NSObject
- (B*)calculateMyBNess;
@end
@interface B:NSObject
- (A*)calculateMyANess;
@end
Pollo; conoce a Egg. Esto nunca puede compilarse porque la interfaz de A depende de que B se defina y viceversa.
Por lo tanto, se puede corregir mediante el uso de @class
:
@class B;
@interface A:NSObject
- (B*)calculateMyBNess;
@end
@interface B:NSObject
- (A*)calculateMyANess;
@end
@class
dice efectivamente el compilador que existe en algún lugar y, por lo tanto, los punteros declarados a constatar la práctica de dicha clase son perfectamente válida dicha clase. Sin embargo, no puede invocar un método en una referencia de instancia cuyo tipo solo está definido como @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.
Ojalá pudiera dar otro +1 solo por 'chicken, meet egg' – lukya
BTW, vuelve a la evaluación 'id'. – jheld
¿Hay motivos particulares por los que algunas personas colocan '@ class' en 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 las clases actuales? Solo curiosidad, gracias. @bbum –