2010-10-11 11 views

Respuesta

83

Es una declaración directa. Básicamente le dice al compilador que hay una clase de ese nombre. Yo lo uso en las declaraciones de interfaz:

@class Foo; 
@interface Bar : NSObject { 
    Foo *someFoo; 
} 
@end 

Por supuesto que podría importar la cabecera de Foo lugar:

#import "Foo.h" 
@interface Bar : NSObject { 
    Foo *someFoo; 
} 
@end 

Pero si someFoo no se expone a los usuarios de Bar, que iba a importar una cabecera adicional archivo que no les sirve. Con la declaración @class los usuarios de Bar ven ninguna importación adicional, porque Foo.h se importará en el archivo de implementación de Bar.

+1

Explicación brillante, ¡Acabo de aprender algo nuevo! Gracias – pnizzle

+0

Todavía no lo entiendo completamente y sé que es una publicación anterior pero y el ejemplo sería bueno. ¿Qué quiere decir con "Usuarios de Bar", clases que tendrán barra como un objeto en ellos? Imean en tu ejemplo Foo es un objeto en Bar. Entonces, ¿cuál es la diferencia entre #import y @class en esta situación? – Esko918

+0

De hecho, una maravillosa explicación. Me enfrenté a una situación anterior en la que debería haberla usado. De todos modos, ahora ciertamente puedo. :) – Ron

23

se llama una declaración directa.

que utilizan esta directiva para indicar al compilador que hay una clase objc con el nombre especificado. sus otras opciones son incluir la interfaz o usar el id para variables o tipos.

esto es útil para minimizar las dependencias. Los uso siempre que puedo para minimizar las dependencias y reducir significativamente los tiempos de compilación.

es el mismo que en C y C++:

struct mon_struct; 
namespace MON { class mon_class; } 
+3

+1 para inclinar que esto se debe preferir para reducir tiempos de construcción. –

1

@class se utiliza para la creación de avance declaración de cualquier clase. Si está creando cualquier clase cuya implementación le es desconocida, puede hacerlo utilizando la directiva del compilador @class.

se puede implementar esta clase cuando la aplicación se conoce a usted.

8

esperanza que esto ayudará a poco más

Por encima de respuesta ya estado casi todas las cosas, me gustaría añadir algo sobre ella.

El @class Foo es una declaración de avance de la clase Foo. Es como decirle al compilador, existe la clase foo. Así que no te preocupes por eso ahora mismo.

Nota: - Declaración de clase se vuelve muy crítico cuando tanto la clase se necesitan mutuamente. si hacemos la declaración usual de #import entonces, tendríamos un bucle infinito de importaciones y a los compiladores no les gustan los bucles infinitos. Entonces usamos @class Classname.