2012-09-24 12 views
6

Soy un novato, tratando de tomar una aplicación freeware actualizada por última vez en 2008 y (aparentemente) abandonada por los programadores, que no han respondido a mis correos electrónicos, y ambos lo actualizan para el MacOS actual y también crean una versión para el iPhone. Me imagino que va a ser un proceso largo y algo de pesadilla, pero estoy deseando aprender.novato tratando de entender múltiples @interface en archivo .h

En este momento estoy en las etapas iniciales, y yo estoy mirando el siguiente archivo de GeniusPair.h en el original:

#import <Foundation/Foundation.h> 

@class GeniusItem; 
@class GeniusAssociation; 

extern const int kGeniusPairDisabledImportance; 
extern const int kGeniusPairMinimumImportance; 
extern const int kGeniusPairNormalImportance; 
extern const int kGeniusPairMaximumImportance; 

@interface GeniusPair : NSObject <NSCoding, NSCopying> { 
GeniusAssociation * _associationAB; //!< Stats for standard learning mode directional relationship. 
GeniusAssociation * _associationBA; //!< Stats for Jepardy style learning mode directional relationship. 

NSMutableDictionary * _userDict; 
} 

+ (NSArray *) associationsForPairs:(NSArray *)pairs useAB:(BOOL)useAB useBA:(BOOL)useBA; 

- (id) initWithItemA:(GeniusItem *)itemA itemB:(GeniusItem *)itemB userDict:(NSMutableDictionary *)userDict; 

//various other methods declared 

@end 


@interface GeniusPair (GeniusDocumentAdditions) 

- (BOOL) disabled; 
//various other methods declared 

@end 


@interface GeniusPair (TextImportExport) 

- (NSString *) tabularTextByOrder:(NSArray *)keyPaths; 
//various other methods declared 

@end 

Mi pregunta es (son preguntas): ¿Por qué tener más de una interfaz en un archivo .h? ¿Cuál es la diferencia entre @interface GeniusPair : NSObject y @interface GeniusPair (TextImportExport)? ¿Qué significa tener un @interface seguido de algo entre paréntesis frente a un @interface seguido de dos puntos?

Muchas gracias de antemano por su ayuda explicando.

Respuesta

8

Se llama categoría. Las categorías son útiles para extender clases (cuando no tiene su código fuente, como las clases UIKit o Foundation) o separar la funcionalidad extendida/avanzada de una clase de sus métodos base (este es el caso que encontró).

También se pueden usar para emular métodos privados cuando se utilizan dentro de un contexto de implementación (en lugar de declaración) en un archivo .m.

Más sobre el tema en Apple Developer..

+1

También me gusta declarar interfaces en la parte superior de mis archivos .m para implementar métodos privados falsos, ya que solo serán visibles para la clase pero no para otras clases (por supuesto, todavía se podrán llamar, debería una clase externa ahora están allí). – Simon

+0

@Simon sí, yo también agregaré eso. –

+0

¡Muchas gracias! –

Cuestiones relacionadas