2011-07-29 12 views
18

¿Hay alguna diferencia en hacer¿qué hace @class en el desarrollo de iOS 4?

@class MyViewController; 

en lugar de hacer la importación normal de la .h en el appdelegate.h

#import "MyViewController.h" 

que he visto algún ejemplo recientemente que use la forma @class y me pregunto si hay alguna diferencia.

gracias.

+0

quizás esta pregunta similar puede ayudar: [http://stackoverflow.com/questions/322597/class-vs-import](http://stackoverflow.com/questions/322597/class-vs-import) –

Respuesta

21

Hay una gran diferencia.

@class MyViewController; 

es una declaración hacia adelante para el objeto MyViewController. Se usa cuando solo necesita decirle al compilador sobre un tipo de objeto pero no necesita incluir el archivo de encabezado.

Sin embargo, si usted necesita para crear un objeto de este tipo e invocar métodos en él, tendrá que:

#import "MyViewController.h" 

Pero normalmente esto se hace en el archivo .m.

Un uso adicional de declaraciones directas es cuando define un @protocol en el mismo archivo de encabezado como un objeto que lo usa.

@protocol MyProtocolDelegate; //forward declaration 

@interface MyObject { 
    id<MyProtocolDelegate> delegate; 
    ... 
} 
... 
@end 

@protocol MyProtocolDelegate 
    ... //protocol definition 
@end 

En el ejemplo anterior, el compilador necesita saber que el @protocol MyProtocolDelegate es válida antes de que pueda compilar el objeto MyObject.

Simplemente mover la definición de protocolo por encima de la definición MyObject también funcionaría.

6

@class le permite declarar que un símbolo es un nombre de clase Objective-c sin la necesidad de Importar el archivo de cabecera que define la clase.

Debería usar esto cuando solo necesite el nombre de clase definido para los propósitos de declarar un puntero a la clase o un parámetro de método de la clase, y no necesita acceder a ningún método, campo o propiedad en el clase.

Ahorra una cantidad minúscula de tiempo de compilación frente a la importación, y a veces ayuda a evitar problemas de circularidad engorrosos.

[Y, como rjstelling señala, a veces es útil cuando usted ha intercalado declaraciones y hay que "hacia adelante declare" algo.]

+0

Eso es genial, gracias por la explicación. – user868830

Cuestiones relacionadas