2012-03-17 4 views
47

he comenzado un nuevo proyecto de iOS 5 y notado algo nuevo en la parte superior de cada archivo .m¿Para qué se utiliza la declaración @interface vacía en los archivos .m?

#import "HomeViewController.h" 

@interface HomeViewController() 

@end 

@implementation HomeViewController 
@synthesize ... 
  • Se requiere este @interface adicional ... si tengo un archivo .h separado?
  • ¿Por qué esto no apareció en los proyectos anteriores a iOS 5?
  • ¿Puedo usar esto en lugar de tener un archivo .h por separado?
  • ¿Cuál es la mejor práctica para esto en el futuro?
+0

para encapsulación. – janusbalatbat

+0

posible duplicado de [Diferencia entre definición de interfaz en .h y archivo .m] (http://stackoverflow.com/questions/3967187/difference-between-interface-definition-in-h-and-m-file) –

Respuesta

79

Eso es un class extension. Puede usarlo para hacer declaraciones que no desea que estén en el archivo .h.

Esto fue utilizado por muchos desarrolladores, incluso antes, que agregaron manualmente la extensión en el archivo .m. Así que supongo que Apple incluyó esto en la plantilla porque se usa ampliamente y se considera una buena práctica.

De hecho, el archivo .h solo se debe usar para hacer declaraciones que se utilizarán desde otros archivos. Es posible que deba declarar algunas propiedades, métodos o constantes que solo se utilizarán dentro del archivo .m. Para esas declaraciones, es mejor hacerlas en la extensión de clase.

Así que para responder a sus preguntas:

  • ¿Es esta @interface adicional requerida ... si tengo un archivo .h separado?

No, no es obligatorio, pero es una buena práctica.

  • ¿Por qué esto no aparece en iOS 5 proyectos pre?

Incluso si esto era una práctica comúnmente utilizada, que no estaba incluido en la plantilla.

  • ¿Puedo usar esto en vez de tener un archivo .h separado?

No. La extensión de clase no reemplaza el archivo .h donde usted tiene que declarar el "público" interfaz de su clase .

  • ¿Cuál es la mejor práctica para esto en el futuro?

Usted debe poner en la extensión de clase todas las declaraciones que no necesitan ser visibles fuera del archivo .m.

+0

¡Gracias por una respuesta tan completa! Me alegra ver que Apple incluya esto en la nueva plantilla, ¡ya que es una buena práctica que la mayoría de los desarrolladores están implementando de todos modos! –

11

La sección de interfaz en el archivo de implementación le permite declarar variables, propiedades y métodos que son privados, lo que significa que no serán vistos por otras clases.

No, no se requiere en absoluto. Pero lo uso tanto como sea posible y solo hago públicas esas cosas que otras clases necesitan ver.

+2

Privado en el sentido de que el compilador no ve las variables, propiedades y métodos fuera de la clase, pero como usamos Objective-C, los métodos no son realmente privados de todos modos ya que cualquiera puede llamar a cualquier cosa ... –

+1

Tienes razón, por supuesto ... todavía pienso en C++ a veces. –

Cuestiones relacionadas