2012-03-22 5 views
8

Duplicar posible:
Difference between @interface definition in .h and .m file
What is the @interface declaration in .m files used for in iOS 5 projects?¿Cuál es la lógica de poner @interface en el archivo .m?

he visto código como este:

// In Header.h 
@interface Header{} 
@end 

// In Header.m 
@interface Header() 
@end 

Mis preguntas son:

  1. ¿Cuál es la diferencia al ponerlo en 2 archivos?
  2. ¿Por qué poner {} después del nombre de la clase en el archivo ".h" y por qué "()" en el archivo ".m"?

Respuesta

12
@interface MyClass(){ 
    NSInteger aInt; 

} 
@property(nonatomic,strong) NSString *name; 
@end 

es una class extension

con los compiladores modernos esto es una gran manera, a decrale métodos, Ivars y propiedades sólo para uso privado en la clase MyClass.

Las extensiones de clase deben declararse en el archivo de implementación principal (no en una categoría).

Para que pueda ocultar los detalles de implementación desde el archivo de encabezado, son privados.

+0

gracias, realmente resolvió el gran rompecabezas para mí. – itsaboutcode

+1

También puede crear propiedades de implementación, que considero más útiles que las extensiones de clase. –

+0

Para usar ivars en extensiones, debes usar el llvm 3+. GCC no tiene conocimiento de esta sintaxis – vikingosegundo

3

Esto se ha convertido en una práctica común para declarar propiedades/métodos "privados" para una clase determinada. Al declararlos en una extensión de clase anónima dentro de .m, estas propiedades/métodos no están expuestos a objetos consumidores.

Cuestiones relacionadas