2009-03-27 12 views
5

Estoy aprendiendo Objective-C a través del cacao (y me encanta). Estoy siguiendo un tutorial. Hay una clase llamada Menú y la interfaz se ve más o menos así.Objective C class definition confusion

@interface Menu: MenuObject {} 
@end 

@interface MenuLayer : LayerObject {} 
-(void) someMethod:(id)sender 
-(void) someOtherMethod:(id)sender 
@end 

y las implementaciones siguen la misma convención

@implementation Menu 
    -(id)init{ 
     // blah blah blah 
    } 
@end 

@implementation MenuLayer 
    // init, someMethod and someOtherMethod stuff here 
@end 

que para mí se parece a dos objetos separados/clases que se definirán y aplicarán de los mismos archivos. ¿Hay alguna razón para hacer esto? ¿El resultado sería el mismo si dividiera los archivos .h y .m en Menu.h/.m y MenuLayer.h/.m? ¿O estoy malentendiendo algo fundamental?

Respuesta

5

Debería estar bien dividirlas en archivos separados. La mayoría de las veces cuando ves cosas implementadas de esa manera es solo porque las 2 clases están tan estrechamente unidas que nunca las usarías una sin la otra.

Por lo tanto, es realmente una cuestión de estilo. No hay "magia" en el hecho de que ambos están definidos e implementados en el mismo archivo.

+0

Además, una gran cantidad de tutoriales y libros ponen la interfaz y la implementación en el mismo archivo para ahorrar espacio en la página, y/o para diferir la discusión de includes y .h/.m hasta más adelante. –

3

Esto es solo una cuestión de preferencia personal. Debería poder dividirlos, siempre que #import uno de los encabezados de la otra si es necesario. Objective-C simplemente te da la opción de agrupar clases juntas en archivos, en lugar de Java, lo que te obliga a dividirlas. Si las clases están estrechamente relacionadas, puede ser más fácil ver cómo funciona todo en un solo archivo, en lugar de tener que cambiar entre varios.

1

Su opinión es correcta. Dos clases separadas están siendo declaradas y definidas.

La razón probable para hacer esto es que ambas clases son necesarias para hacer lo que sea que Menu hace. Tener ambas clases en el mismo encabezado y fuente hace que la interfaz sea más compacta.

Dividirlo en dos archivos seguiría funcionando.