2010-05-02 18 views

Respuesta

11

"Importar" vincula el archivo de encabezado que contiene. Todo en el encabezado, incluidas las definiciones de propiedad, las declaraciones de métodos y las importaciones en el encabezado están disponibles. Import proporciona las definiciones reales al vinculador.

@clase por el contrario simplemente le dice al vinculador que no se queje, no tiene definición para una clase. Es un "contrato" que proporcionará una definición para la clase en otro punto.

Más a menudo utiliza @class para evitar una importación circular, es decir, ClassA se refiere a ClassB, por lo que importa ClassB.h en su propia ClassA.h pero ClassB también se refiere a ClassA, por lo que importa ClassA.h en ClassB.h. Dado que el extracto de importación importa las importaciones de un encabezado, esto hace que el enlazador ingrese un bucle infinito.

Mover la importación al archivo de implementación (ClassA.m) impide esto, pero luego el enlazador no reconocerá ClassB cuando ocurra en ClassA.h. La directiva @class ClassB; le dice al vinculador que proporcionará el encabezado para ClassB más tarde antes de que realmente se use en el código.

+0

Muy buena explicación. ¡Gracias! – sashaeve

Cuestiones relacionadas