2012-05-07 25 views
7

Estoy tratando de hacer algunas animaciones en un objeto que he configurado a través de IB. Estoy agregando una declaración hacia adelante a mis .h así:iOS - importación frente a declaración directa con respecto a setAlpha

@class MySpecialClass; 

y luego configurar una propiedad de este modo:

@property (nonatomic, retain) IBOutlet MySpecialClass *specialClass; 

Quiero ser capaz de ocultar el uso de specialClasssetAlpha, pero Obtenga el siguiente error de xcode al intentar compilar.

Receiver type 'MySpecialClass' for instance message is a forward declaration. 

¿Debo importar mi clase en lugar de una declaración directa? Me gustaría no tener que importar nada innecesario si no es necesario.

Respuesta

44

La declaración directa solo le dice al compilador: "Oye, sé que estoy declarando cosas que no reconoces, pero cuando digo @MyClass, prometo que lo importaré en la implementación ".

Se utilizan declaración adelantada para evitar cosas como circular incluye (MiClase importa YourClass que importa MiClase el que ...), pero la 'promesa' que realice con su código, es que usted import más tarde

+4

Una de las mejores y más concisas explicaciones que he leído, muy bien hecha. Te votaría más si fuera posible. – BonanzaDriver

+1

finalmente he entendido la declaración directa, gracias :) – dreampowder

5

Tiene que importarlo. La declaración directa es solo para silenciar al compilador de que existe esta clase, pero no tiene idea de sus miembros, métodos, propiedades, tamaño ...

+9

Sin embargo, la importación se puede hacer en el archivo .m. El patrón habitual es la declaración directa en .h, importar en .m. – jrturton

+0

Sí, eso es correcto. – graver

Cuestiones relacionadas